以前不知在哪个人Bolg上看过一句话,说,永远不要认为书看过一遍就够了。今天翻翻书,才知道这话果然不
假。每本涉及面向对象的书,都会毫无例外的讲到类的三个特点:封装,继承和多态。原本以为看的不想再看的内
容,再翻一翻,居然发现有当初不知是遗漏还是遗忘的知识点。。。。。当下就十分惭愧,特发此文,引以为戒。
##########################################################################
技术部分:
先引用书中原文:如果一个类继承自一个基类,那么这个类会从基类继承得到所有的操作,属性,特性。。。。。关键就是构造函数。
(property),事件以及这些内容的实现方法。例外的是,类不会从基类继承实例构造函数,析造函数
(又不知道是什么。。。等下查资料去--|)和静态构造函数
在创建派生类对象时,系统必须先实执行基类的构造函数然后再执行派生类的构造函数。比如说,此时基类的构
造方法有一个参数,那么在派生类中就必须先实现基类的这个带有参数的构造函数。在派生类中可以用base()来引
用基类的构造函数,示例:
public class BaseClass//基类
...{
public BaseClass(string s)
...{
Console.WriteLine("Str={0}", str);
}
}
public class ChildClass:BaseClass//派生类
...{
public ChildClass(string str):base(str)//继承基类构造函数
...{
Console.WriteLine("ChildStr={0}",str);
}
}或者:
public class ChildClass1 : BaseClass//派生类
...{
static string str = "ChildClass1";//这里一定要是静态变量
public ChildClass1(): base(str)//继承基类构造函数
...{
Console.WriteLine("Child1Str={0}",str);
}
}因为基类构造函数在派生类之前,所以上面不用静态变量的话便会出现“XXX要求对象引用”的编译错误。
测试一下:
class Program
...{
static void Main(string[] args)
...{
Console.WriteLine("BaseClass:");
BaseClass b = new BaseClass("BaseClass");
Console.WriteLine("ChildClass:");
ChildClass c = new ChildClass("ChildCalss");
Console.WriteLine("ChildClass1:");
ChildClass1 c1 = new ChildClass1();
Console.Read();
}
}运行结果如下:
BaseClass:
BaseStr=BaseClass
ChildClass:
BaseStr=ChildCalss
ChildStr=ChildCalss
ChildClass1:
BaseStr=ChildClass1
Child1Str=ChildClass1
本文通过实例详细介绍了在面向对象编程中,子类如何继承父类的构造函数,并强调了在创建子类对象时,系统首先执行父类构造函数的重要性。
8970





