Sunday, October 24, 2004
- 域的存取限制集中体现了面向对象编程的封装原则。
- 只读(readonly)域不能进行写操作,不变常量(const)不能被修改,这两者到底有什么区别呢?
- 只读域只能在初始化--声明初始化或构造器初始化--的过程中赋值,其他地方不能进行对只读域的赋值操作,否则编译器会报错。只读域可以是实例域也可以是静态域。只读域的类型可以是C#语言的任何类型。
- 但const修饰的常量必须在声明的同时赋值,而且要求编译器能够在编译时期计算出这个确定的值。const修饰的常量为静态变量,不能够为对象所获取。const修饰的值的类型也有限制,它只能为下列类型之一(或能够转换为下列类型的):sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, string, enum类型, 或引用类型。能够声明为const的引用类型只能为string或值为null的其他引用类型。
- 实际上,如果我们能够理解const修饰的常量是在编译时便被计算出确定的值,并代换到引用该常量的每一个地方,而readonly时在运行时才确定的量--只是在初始化后我们不希望它的值再改变,我们便能理解C#设计者们的良苦用心,我们才能彻底把握const和readonly的行为!
- C#不提倡将域的保护级别设为public而使用户在类外任意操作--那样太不OO,或者具体点说太不安全!对所有有必要在类外可见的域,C#推荐采用属性来表达。属性不表示存储位置,这是属性和域的根本性的区别。
- 继承:
一个现有的类(基类)派生出一个新类(子类)时,子类将自动获得所有被声明在基类的非private方法、属性和字段(注意基类的构造器是不会被继承的。)。子类可以通过增加或者替换它继承到的各种方法、属性和字段的方式对基类的功能进行扩展。
- 继承能力是类和结构的重要区别之一。结构不支持继承机制。
- 学海无涯,面向对象的程序设计既是一门科学,也是一门艺术,如果这本书能让大家领略到它的一些奥妙,作者知足了!!
- 继承与预构造器(constructor initializer)
- 每一个构造器都会用一个预构造器
- 子类不能继承基类的构造器但是可以“拿来用”,用关键字“base”指定父类和“this”指定本类中的构造器作为本构造器的预构造器。
- 在没有指定时,父类的无参数构构造器为缺省的预构造器,即:“base()”
- 访问限定符理解:
很多新手认为代码共享就是最大限度的开放自己的代码,总是不假思索把所有东西都声明为“public”,其实类里面的public成员应该越少越好,因为可以降低调试难道,还遵循“尽量掩藏数据。使类成为一个代码黑箱”的原则。 |