类 class 存储在堆(heap)上,是引用类型
数据成员
函数成员
ref参数:通过值传送变量是默认的,也可以迫使值参数通过引用传送给方法,要使用ref关键字,如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所作的任何改变都会影响原来对象的值。
例


static void SomeFunction(int[] ints,ref int i)
{
ints[0]=100;
i=100;
}
SomeFunction(ints,ref i);
out关键字,输出参数,用于函数返回多值时使用


static void SomeFunction(out int i)
{
i=100;
}
public static int Main()
{
int i;//使用out关键字可以传入不初始化的参数
SomeFunction(out i);
Console.WriteLine(i);
return;
}
静态构造函数


class MyClass
{
static Main()
{
}
}
用途:类有一些静态字段或者属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性,静态构造函数至多运行一次,并在类被引用之前执行,每个类只能带有一个静态构造函数,并且不能有参数
readonly 只读字段,readonly字段比const灵活的的多,允许把一个字段设置为常量,但可以执行一些运算来确定它的初值,规则是在构造函数中给只读字段赋值,只读字段可以只实例化的也可以只静态的,静态的需要显式声明
匿名类型 var与new 关键字一起使用时可以创建匿名类型,匿名类型只是一个继承了Object类的,没有名称的类,该类的定义从初始化器中推断,类似于隐式类型化的变量


var captain=new {FirstName="James",MiddleName="T",LastName="Kirk"};
结构 struct存储在堆栈(stack)上是值类型包含数据成员,函数成员。
结构是值类型不是引用类型
结构不支持继承
结构的构造函数的工作方式不同于类,编译器总是提供一个默认的无参的构造函数,这是不允许替换的
使用结构可以指定字段在内存中如何布局