定义类成员

来源:互联网 发布:电脑截屏软件 编辑:程序博客网 时间:2024/05/17 04:04

一、定义类成员

先要明确类的成员有哪些:

1.数据成员:字段和常量

2.函数成员:方法、属性、索引器、事件、运算符、构造函数和析构函数

1).NET Framework 中的公共字段以PascalCasing 形式来命名,而不是camelCasing

私有字段没有推荐的命名模式,它们通常使用camelCasing 来命名。

2)只读字段:

使用关键字readonly,表示这个字段只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值。(只能在字段声明或构造函数中重新赋值,在其他任何地方都不能改变只读字段的值)

3)常量:

用const修饰符声明的字段为常量。只能在声明中初始化,以后不能再修改。

按照定义,const 成员也是静态的,所以不需要用static 修饰符(用static 修饰符会产生一个错误)

4)方法:

如果使用了override,也可以使用sealed 指定在派生类中不能对这个方法作进一步的修改,即这个方法不能由派生类重写。

5)属性:

是字段的扩展,提供了一种更灵活和安全的机制来读取、修改或计算字段的值(set,get).NET 中的公共属性也以PascalCasing 方式来命名。

6)自动属性:

利用自动属性,可以用简化的语法声明属性,C#编译器会自动添加未键入的内容。具体而言,编译器会声明一个用于存储属性的私有字段,并在属性的get 和set 块中使用该字段,我们无需考虑细节。

public int MyIntProp { get; set; }

我们按照通常的方式定定义属性的可访问性、类型和名称,但没有给get 和set 块提供实现代码。

这些块的实现代码(和底层的字段)都由编译器提供。

二、嵌套的类型定义:

public class MyClass

{

public class MyNestedClass

{

public int NestedClassField;

}

}

如果要在MyClass 的外部实例化MyNestedClass,就必须限定名称

MyClass.MyNestedClass myObj = new MyClass.MyNestedClass();

三、这里再强调一下接口:

1)不允许使用访问修饰符(public、private、protected 或internal),所有的接口成员都是公共的。

2)接口成员不能包含代码体。

3)接口不能定义字段成员。

4)接口成员不能用关键字static、virtual、abstract 或sealed 来定义。

5)类型定义成员是禁止的

6)接口与类一样,可以定义为类的成员(但不能定义为其他接口的成员,因为接口不能包含类型定义)。

四、部分类定义:

使用部分类定义,可以把类的定义放在多个文件中。例如,可以把字段、属性和构造函数放在一个文件中,而把方法放在另一个文件中。为此,只需在每个包含部分类定义的文件中对类使用partial 关键字即可

public partial class MyClass : IMyInterface1

{

...

}

public partial class MyClass : IMyInterface2

{

...

}

public class MyClass : IMyInterface1, IMyInterface2

{

...

}

是等价的

部分类也可以定义部分方法。部分方法在部分类中定义,但没有方法体,在另一个部分类中包含实现代码。在这两个部分类中,都要使用partial 关键字。

public partial class MyClass

{

partial void MyPartialMethod();

}

public partial class MyClass

{

partial void MyPartialMethod()

{

// Method implementation

}

}

部分方法也可以是静态的,但它们总是私有的,且不能有返回值。它们使用的任何参数都不能是out 参数,但可以是ref 参数。部分方法也不能使用virtual、abstract、override、new、sealed 和extern修饰符。

编译代码时,如果代码包含一个没有实现代码的部份方法,编译器会完全删除该方法,还会删除对该方法的所有调用。执行代码时,不会检查实现代码,因为没有检查方法的调用。这会略微提高性能。

原创粉丝点击