结构(struct)在内存中的存储地点是:栈(stack);
类(class)在内存中的存储地点是:堆(heap);
示例:
struct retangle
{
public double width;
public double height;
public retangle(double width,double height)
{
…
}
}
因为是值类型,所以用new运算符的时候编译器是不会在堆上分配空间的.我们要做的,仅仅是声明就可以了:
retangle ret;
ret.width=3;
ret.height=4;
结构与类的区别:
1,值类型与引用类型的区别,值类型存储在stack中(注:如果他们是一个对象的一部份,就会保存在heap中),或存储为内联(inline).
2,结构不支持继承. Object –> ValueType –> Struct
3,编译器总是为结构提供一个无参数的默认构造函数,而且这个构造函数是不允许替换的.(因为.NET运行库不能调用用户定制的无参构造函数).结构的默认构造函数会把所有的字段都初始化为0。不能提供字段的初始值,否则会有编译错误。
4,使用结构,可以指定字段如何在内存中布局.
Ref与Out的异同:
在.NET中通过值传递参数是默认的。这两个关键字都是迫使值参数通过引用来传递给方法的方法。
Ref这种方式,在传递前,变量需要初始化。
Out这种方式,认为初始化没有必要。
函数重载:
仅仅在返回值的类型上不同,不算重载;
参数是仅仅是ref 与 out的不同,不算重载.
静态构造函数:
编写这种构造函数的原因是:类有一些静态字段或属性,需要在第一次使用前,从外部源中初始化。
注意:静态构造函数没有访问修饰符,其它的C#代码从来不调用它,但在加载类是,总是由。NET运行库来调用,所以访问修饰符对于他来说是没有意义的。当然也不能带任何参数,当然也只能有一个,也不能访问任何实例成员。