与 Java 不同的是,文件名可以不同于类的名称。
标识符可以包含@,且可以以 @ 开头

变量分为值类型、引用类型、指针类型

值类型在线程栈分配空间,引用类型在托管堆分配空间
参考:https://www.cnblogs.com/yinrq/p/5588330.html
C#基础 - 图1

值类型(System.ValueType)

从类 System.ValueType 中派生

引用类型

内置的 引用类型有:object、dynamic 和 string。

Object类型(System.Object)

Object类型是C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。是 System.Object 类的别名。对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。

Dynamic类型

类似于Python变量。
可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。

String类型(System.String)

字符串型,是 System.String 类的别名。

指针类型

与C++指针一样。

装箱,拆箱

当一个值类型转换为对象类型(引用类型)时,则被称为 装箱;另一方面,当一个对象类型(引用类型)转换为值类型时,则被称为 拆箱。

  1. // 装箱
  2. int i=1;
  3. object obj=(object)i;
  4. // 拆箱
  5. object obj=”1”;
  6. int i=(int)obj;
  7. // 值类型变为引用类型不一定要装箱,例如:
  8. string str = "joye.net" + 26; //需要将26装箱为string类型
  9. string str1 = "joye.net" + 26.ToString(); //tostring后不需要装箱

ref, out, in

ref关键字指示按引用传参

面向对象

权限控制

除掉public, private, protected,还有internal
默认为internal
internal代表同一程序集中能访问到(一个能生成exe或dll的项目,VS中的一个project)

嵌套类

参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/nested-types
类、构造、接口里面可以嵌套类。
嵌套类型均默认为 private;仅可从其包含类型中进行访问。
嵌套类可以访问外部类的所有属性和方法,外部类只能访问内部类修饰符为public、internal的属性和方法。

接口

using System;

interface IMyInterface
{
        // 接口成员
    void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
    static void Main()
    {
        InterfaceImplementer iImp = new InterfaceImplementer();
        iImp.MethodToImplement();
    }

    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }
}

反射

参考:https://www.runoob.com/csharp/csharp-reflection.html

using System.Reflection;
System.Reflection.MemberInfo info = typeof(MyClass);