对象与类型

来源:互联网 发布:linux 自动启动oracle 编辑:程序博客网 时间:2024/05/16 06:00

结构(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运行库来调用,所以访问修饰符对于他来说是没有意义的。当然也不能带任何参数,当然也只能有一个,也不能访问任何实例成员。

原创粉丝点击