读书笔记_C#技术内幕_第八章(设计面向对象的程序)

来源:互联网 发布:淘宝导购软件 编辑:程序博客网 时间:2024/06/05 19:33
 

继承性:

它是关于一个类(派生类)怎样从另一个类(基类)中共享的特性和行为的术语

 

派生类继承标记为protected或更高的访问级别的每一个基类成员。

 

抽象类永远不能实例化。因为抽象类的成员都是没有实现的。抽象类的好处是:它位于类层次结构的顶端,它们建立了代码的结构和意义,使得程序框架更加容易建立。

 

可以从派生类调用基类的构造函数。

abstract public class A

{

       private int i;

 

       public A(int i)

       {

              this.i = i;

}

}

 

public class B : A

{

       public B(int i) : base(i)

       {

}

}

 

当类没有显式的构造函数时,系统就会分配一个默认的构造函数。该默认的构造函数就会自动地调用默认的或无参数的基构造函数。下面是一个自动生成默认构造函数的例子,这种情况也会出现在前面的例子中:

public B() : A()

{

}

 

隐藏基类成员:

有时派生类成员与相应的基类成员有相同的名称。在这种情况下,就称为派生类成员隐藏了基类成员。当发生隐藏时,派生类成员就屏蔽了基类成员的功能。派生类的用户不能看到隐藏的成员,他们只能看到派生类的成员。

 

虽然基类成员可以被隐藏,但是派生类仍然能够访问它。派生类通过base标示符来访问其基类成员。

 

sealed类:

sealed类是不能从中派生的类。要防止其他类从一个类继承,就使用sealed类。

把一个类变成sealed后就可以避免与虚拟方法相关联的系统总开销。编译器就能完成某种程度的优化。

另一个原因是出于安全性的考虑。类变成sealed类之后就完全避免了由派生类引起崩溃的可能性。

 

多态性:

abstract public class A

{

       public virtual string MyString()

       {

              return “This is A”;

}

}

 

public class B : A

{

       public new string MyString()

       {

              return “This is B”;

}

}

 

public class C : A

{

       public override string MyString()

       {

              return “This is C”;

}

}

 

如果使用下面的代码

 

A[] AA = new A[2];

A[0] = new B;

A[1] = new C;

 

foreach (A a in AA)

{

       MessageBox.Show(a.MyString());

}

 

结果将是:

This is A

This is C

 

多态同样也可以被用于特性和索引器中。