Liny_@NotePad

沉迷ACG中

<C#高级编程>第3章笔记

YOYO posted @ 2010年3月04日 20:01 in 【C#】 with tags C#高级编程 , 1866 阅读

3 对象和类型


 类(class)是存储于堆(heap)上的引用类型,结构(struct)是存储在栈(stack)上的值类型。

 

方法:类中的函数,可以是实例方法,也可以是静态方法。定义、调用、传参与Java一样。

属性(属性访问器):与访问类的公共字段类似的方式访问的函数。(类似settergetter的一对方法)

构造函数:类似C++的构造函数及Java的构造方法。

终结器~类名):类似于C++中的析构函数及Java中的finialize方法。

运算符:支持运算符重载。

索引器:用于排序。

函数:包括方法、构造函数、终结器等非数据成员,都可以叫作函数。

 

方法

 

引用传参C#中指出对值参数进行引用传参,需要在值类型前面加上 ref 关键字来修饰。

 

多个输出C#中默认的输入参数都必须初始化,若作为输出参数,只要在类型前面加上 out 关键字修饰,则不需要初始化,同时在方法内的任何改变都会被保留,同时,在调用该方法时也需要对参数加上 out 修饰符。

 

方法重载:基本类似于JavaC++。两个方法不能仅在返回类型上有区别,另外,不能只根据参数声明为ref还是out来区分。

 

属性

 

属性的命名规则:公共属性用Pascal规则,私有属性用camel规则,字段采用下划线+camel规则。

 

属性的访问权限:可以通过给getset访问器不同的访问修饰符来实现。另外,不写get即为只写属性,不写set则为只读属性。

 

属性的访问效率:一般CLR会将其内联,因此不用考虑。与C++不同的是,C#不能自己控制函数是否inline

 

构造函数

 

构造函数:与C++Java类似,亦支持重载。

 

静态构造函数:与Java中的静态代码块相似,在类名前加上static修饰,无参,可以与无参构造函数并存。由.NET运行库在引用类之前执行。

 

在构造函数中调用其他的构造函数:类似C++中的方法继承,本类通过this访问,基类通过base访问,形如:

public Car(String description, uint nWheels) { }

public Car(String description): this(description, 4) {  }

若采用第二个构造函数构造对象,则会先访问第一个构造函数,再访问第二个构造函数。

 

只读字段

 

通过 readonly 修饰的字段,可以一开始不给其确定值,而是在构造函数中赋值。

若在构造函数中不给其赋值,则它的值就是默认值。

 

结构

 

不支持继承,但也是object的子类,可以重写它的方法,派生于System.ValueType,可以派生多个接口。值类型。

编译器总是提供一个无参的构造函数,不允许用户提供无参构造函数。同样也不允许提供字段初始值。

用户可以指定字段在内存中的布局。

通过new关键字或分别给所有字段赋值可以初始化结构。

主要用于小的数据结构。当把它作为参数传递给方法时,为避免性能损失应当作为ref参数传递。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter