我应该如何在类层次结构中链接构造函数?
我们有以下类层次结构:
public class Base { public Base() { // do generic initialization } public Base(SomeClass param1) : this() { // init properties that require param1 } public Base(SomeClass param1, OtherClass param2) : this(param1) { // init properties that require param2 } // ... } public class Derived : Base { public Derived() { // do custom initialization } public Derived(SomeClass param1) : this() // ??? { // do custom initialization using param1 } public Derived(SomeClass param1, OtherClass param2) : this(param1) // ??? { // do custom initialization using param2 } // ... }
我们需要Derived
运行它自己的初始化例程,链上和基类中相应的初始化例程。 我们如何链接构造函数而不重复代码/运行一些构造函数两次?
在派生类链中,构造函数的参数最少的构造函数具有最多的参数,然后具有最多参数的派生构造函数被链接到base。 像这样的东西:
public class Base { public Base() : this(null, null) { } public Base(SomeClass param1) : this(param1, null) { } public Base(SomeClass param1, OtherClass param2) { if (param1 != null) { // initialise param1 } if (param2 != null) { // initialise param2 } } } public class Derived : Base { public Derived() : this(null, null) { } public Derived(SomeClass param1) : this(param1, null) { } public Derived(SomeClass param1, OtherClass param2) : base(param1, param2) { } }
根据上下文,使用default(T)而不是null来指示缺失/默认值可能更好。
你通常用最少的构造函数链接到最大的构造函数,如下所示:
public Derived(SomeClass param1) : this(param1, param2) {}
有关更多信息,请参阅有关C#中的构造函数的文章。
编辑:
按照下面的@Scott:
具有最多参数的那个将是public Derived(SomeClass param1, OtherClass param2) : base(param1, param2)
并且您将初始化代码放在derived
和base
中的2参数构造函数中
为了certificate所有构造函数都被调用,我起草了一个程序:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { public class Base { public Base() : this(null, null) { } public Base(string param1) : this(param1, null) { } public Base(string param1, string param2) { Console.WriteLine("Base Class: " + param1 + "+" + param2); if (param1 != null) { // initialise param1 } if (param2 != null) { // initialise param2 } } } public class Derived : Base { public Derived() : this("", "") { } public Derived(string param1) : this(param1, "") { } public Derived(string param1, string param2) : base(param1, param2) { Console.WriteLine("Derived Class: " + param1 + "+" + param2); } } class Program { static void Main(string[] args) { Derived d = new Derived("test1", "test2"); Console.ReadLine(); } } }
输出:
上述就是C#学习教程:我应该如何在类层次结构中链接构造函数?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Base class: test1+test2 Derived class: test1+test2
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006967.html