标签:
在本章及本部分后续的章节,我将解释如何在一个类型中定义不同种类的成员,从而设计出符合自己需要的类型。
在一个类型中可以定义0个或多个以下种类的成员:
无论使用什么编程语言,它的编译器都必须能处理你的源代码,为上述列表中的每一种成员生成元数据和IL代码。无论使用的编程语言是什么,元数据的格式都是完全一致的。正是因为这个特点,才使CLR成为公共语言运行时。
CLR使用公共元数据格式决定常量、字段、构造器、方法、属性和事件在运行时的行为。元数据是整个.Net Framework开发平台的关键,它实现了编程语言、类型和对象的无缝集成。
以下C#代码展示了一个类型定义,其中包含了所有可能的成员。
在文件范围内定义类型时,可以将类型的可见性指定为public和internal。
public类型不仅对它的定义程序集中的所有代码可见,还对其他程序集中的代码可见。
internal类型仅对定义程序集中的所有代码可见,对其他程序集中的代码不可见。
定义类型时,如果不显式指定类型的可见性,C#编译器默认将类型的可见性设为internal(两者中较有限的那一个)。
友元程序集
友元程序集功能用于访问内部成员;私有类型和私有成员仍然不可访问。
若要使程序集(程序集 B)能够访问另一个程序集(程序集 A)的内部类型和成员,应使用程序集 A 中的 InternalsVisibleToAttribute 属性
在代码中引用一个成员时,成员的可访问性指出这种引用是否合法。
当然,任何成员想要被别人访问到,都必须在一个可见的类型内定义。例如,如果程序集AssemblyA定义了一个internal类型,该类型有一个public方法,那么程序集AssemblyB中的代码不能调用AssemblyA中的public方法,因为internal类型对于AssemblyB是不可见的。
在C#中,如果没有显式声明成员的可访问性,编译器通常默认选择private(限制最大的那个)。CLR要求接口类型的所有成员都具有public可访问性。
静态类是不能实例化的,例如Console,Math,Environment和ThreadPool类。这些类只有static成员。我们直接使用它的属性与方法,静态类最大的特点就是共享,作用是将一组相关的成员组合到一起。例如Math类中定义了一组执行数学运算的方法。Math 类:为三角函数、对数函数和其他通用数学函数提供常数和静态方法。
static关键字只能应用于类,不能应用于结构(值类型)。这是因为CLR总是允许值类型实例化。
静态类的主要特点如下:
C#编译器对静态类进行了如下限制:
在类或结构内部定义的类型称为嵌套类型。例如:
class Container { class Nested { Nested() { } } }
通过static关键字修饰,是属于类,实例成员属于对象,在这个类第一次加载的时候,这个类下面的所有静态成员会被加载。
实例构造函数:使用 new 表达式创建某个类的对象时,会使用实例构造函数创建和初始化所有实例成员变量。
只要创建基于 CoOrds 类的对象,就会调用此实例构造函数。 诸如此类不带参数的构造函数称为“默认构造函数”。 然而,提供其他构造函数通常十分有用。 例如,可以向 CoOrds 类添加构造函数,以便可以为数据成员指定初始值:
class CoOrds { public int x, y; // constructor public CoOrds() { x = 0; y = 0; } public CoOrds(int x, int y) { this.x = x; this.y = y; } } class MainClass { static void Main() { CoOrds p1 = new CoOrds(); CoOrds p2 = new CoOrds(5, 3); } }
partial这个关键字告诉C#编译器,一个类、结构或者接口的定义源代码可能要分散到一个或多个源代码文件中。
当使用大项目或自动生成的代码(如由 Windows 窗体设计器提供的代码)时,将一个类、结构或接口类型拆分到多个文件中的做法就很有用。
局部类型适用于以下情况:
局部类型的注意点:
组件软件编程(Component Software Programming)
下面列举了组件的一些特点:
在.Net中,版本号为1.2.3.4的程序集,其主版本号1,次版本号2,内部版本号3,修订号为4。
6.6.1 CLR如何调用虚方法、属性和事件
方法代表在类型或者类型的实例执行某些操作的代码。
在类型上执行操作称为静态方法。在类型的实例上执行操作称为非静态方法。
任何方法都有一个名称、一个签名和一个返回值(可以是void)。
标签:
原文地址:http://www.cnblogs.com/chrisghb8812/p/5618278.html