7.章 类和集成
☆:为重点
★:为科普
△:注
▲:术语
△△:警告
●:本章知识点
●●:结束本章
○:代码
□:本节知识点
■:本节知识点(分)
●:7.1类继承
通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。
□:可以使用一个已经存在的类作为新类哦对基础。已存在的类成为基类(base class),新类成为派生类(derivde class)。派生类成员如下:
■:本身声明中的成员:
■:基类的成员:
□:要声明一个派生类,需要在类名后面加入基类规格说明。基类规格说明有冒号和后面跟着用作基类的类名称组成。派生类被描述为直接继承自列出的基类。
□:派生类扩展的它的基类,因为它包含了基类的成员,加上在它本身声明中新增功能。
□:派生类不能删除它所继承的任何成员。
△:例如,下面展示了名为OtherClass的类的声明,它继承名称为SomeCLass的类:
基类描述符
↓
○: class OtherClass : SomeClass
{ ↑ ↑
//代码块 冒号 基类
}
●●:结束本节
●:7.2访问继承的成员
继承的成员可以被访问,就像他们是派生类自己生命的一样(继承的结构有些不同)
例如,下面的代码声明了类SomeClass和OtherClass。这段代码显示OtherClass。的所个成员都能被无缝地访问,无论它们在基类中声明的还是在派生类中声明的;
□:Main创建派生类OtherClass的一个对象。
□:Main中接下来的两行调用基类中的Method1,先是使用基类的Field1,然后是派生类的Field2.
□:Main中后续的两行调用派生类中的Method2,再次先使用基类的Field1,然后是派生类的Field2.
○:Class SomeClass //基类
{
public string Field1="base class field";
public void Method1(string value) {
Console.WriteLine("Base class__met1;{0}",value);
}
}
○: class OtherClass:SomeClass //派生类
{
public string Field2="der class field";
public void Method2(string value) {
Console.WriteLine("der class__met2;{0}",value);
}
}
○:class program{
static void Mian(){
OtherClass oc=new OtherClass();
oc.Method1(oc.Field1);
oc.Method1(oc.Field2);
oc.Method2(oc.Field1);
oc.Method2(oc.Field2);
}
}
以上三个代码结果
ase class__met1; base class field
ase class__met1; der class__met;
der class__met2; base class field
der class__met2; der class__met;
●●:结束本节
●:7.3所有类都是派生自object类
△:除了特殊的类object,所有的类都是派生类,即使它们没有基类规格说明。类object是唯一的非派生类,因为它是继承层次结构的基础。
△:没有基类规格说明的类隐式地直接派生自类object。不加基类规格说明只是指定object为基类的简写。这两个形式是语义等价的。
○:class SomeClass{
//代码块
}
○:class SomeClass:object{
//代码块
}
△:上面的类说明隐式地派生自object类,而下面的则显示派生自object。这两种形式在语义上是等价的。
☆:关于类继承的其他重要内容如下。
□:一个类声明的基类规格说明中只能有一个单独的类。这成为单继承。
□:虽然类只能直接继承一个基类。但继承的层次没有限制。也就是说,作为基类的类可以派生自另外一个类,而这个类又派生自另一个类,一直下去,直到最终到达object。
▲:基类和派生类都是相对的术语。所有的类都是派生类,要么派生自object,要么派生自其它类。所以,通常当我们成为一个类为派生类时,我们的意思是它直接派生自某类而不是object。下图展示了一个简单的类层次结构。在这之后,将不会在图显示object了,因为所有的类最终都派生自它。
●●:结束本节