一、通过子类无参结构函数创建子类实例
创建父类Person和子类Student。
public class Person { public Person() { Console.WriteLine("我是人"); } } public class Student : Person { public Student() { Console.WriteLine("我是学生"); } }
在客户端通过子类无参结构函数创建子类实例。
class Program { static void Main(string[] args) { Student student = new Student(); Console.ReadKey(); } }
输出功效:
我是人 我是学生
可见:通过挪用子类无参结构函数创建子类实例,会默认挪用父类无参结构函数。
如果把父类的无参结构函数去失,会怎样呢?
–功效会报”Person不包罗0个参数的结构函数”错。
二、通过子类有参结构函数创建子类实例
再同时为子类和父类添加有参结构函数。
public class Person { public Person() { Console.WriteLine("我是人"); } public Person(string name) { Console.WriteLine("我是人,我的名字叫{0}", name); } } public class Student : Person { public Student() { Console.WriteLine("我是学生"); } public Student(string name) { Console.WriteLine("我是学生,我的名字叫{0}", name); } }
在客户端通过子类有参结构函数创建子类实例。
Student student = new Student("小明"); Console.ReadKey();
输出功效:
我是人 我是学生,我的名字叫小明
可见:通过挪用子类有参结构函数,同样默认会挪用父类无参结构函数。
三、在子类中明确指出挪用哪个父类结构函数
以上,默认挪用了父类的无参结构函数,但如何挪用父类的有参结构函数呢?
–在子类中使用base
在子类Student中的有参结构函数中使用base,明确挪用父类有参结构函数。
public class Student : Person { public Student() { Console.WriteLine("我是学生"); } public Student(string name) : base(name) { Console.WriteLine("我是学生,我的名字叫{0}", name); } }
客户端
Student student = new Student("小明"); Console.ReadKey();
输出功效:
我是人,我的名字叫小明 我是学生,我的名字叫小明
四、通过子类设置父类的大众属性
在父类Person中增加一个Name大众属性,并在父类的结构函数中对Name属性赋值。
public class Person { public string Name { get; set; } public Person() { Console.WriteLine("我是人"); } public Person(string name) { this.Name = name; Console.WriteLine("我是人,我的名字叫{0}", name); } }
在客户端:
Student student = new Student("小明"); Console.WriteLine("子类获取父类的Name属性值为{0}", student.Name); Console.ReadKey();
输出功效:
我是人,我的名字叫小明 我是学生,我的名字叫小明 子类获取父类的Name属性值为小明
以上代码的执行路径是:
→挪用子类有参结构函数,并把该参数传值给父类有参结构函数
→挪用父类有参结构函数,,并给父类大众属性Name赋值
→子类实例挪用父类的大众属性
其实,以上的做法在分层架构设计中已经得到了很好的使用。在分层架构中,凡是会为所有的Repository创建一个基类,在基类中设计一个代表当前Repository的属性,并在基类的结构函数中为该属性赋值;最终,在创建子类Repository实例时,在为基类的、代表当前Repository的大众属性赋值。
在子类中,当父类通过base拿到子类的参数时,还可以对该参数做一些措置惩罚惩罚,好比代表父类的base把从子类拿到的参数转换成大写。
public class Student : Person { public Student() { Console.WriteLine("我是学生"); } public Student(string name) : base(ConvertToUpper(name)) { Console.WriteLine("我是学生,我的名字叫{0}", name); } private static string ConvertToUpper(string name) { return name.ToUpper(); } }
输出功效:
我是人,我的名字叫DARREN 我是学生,我的名字叫darren 子类获取父类的Name属性值为DARREN
总结:
①.
通过子类无参结构函数创建子类实例,会默认挪用父类的无参结构函数
②.
通过子类有参结构函数创建子类实例,也会默认挪用父类的无参结构函数
③.
在子类结构函数中通过base关键字指明父类结构函数,当通过子类结构函数创建实例,会挪用指明的、父类的结构函数
④.
父类的大众属性可以通过子类来赋值,子类也可以获取到父类的大众属性
相信通过本文上述实例的分析,可以加深大家对C#类的初始化与担任的理解。但愿本文所述对大家进一步的学习C#措施设计有所辅佐。