【问题标题】:C# - How to create constructor for inherited class where parent class only has static constructorC# - 如何为父类只有静态构造函数的继承类创建构造函数
【发布时间】:2018-11-11 17:47:05
【问题描述】:

例如,假设我想创建一个继承 System.Diagnostics.StopWatch 的类,并且在此示例中假设 System.Diagnostics.Stopwatch.StartNew() 是该类的唯一公共构造函数(我知道它不是,但我正在尝试继承一个不同的类):

public class Example : System.Diagnostics.Stopwatch
{
    public Example()
    {
        // ... return System.Diagnostics.Stopwatch.StartNew();
    }
}

我知道有明显的解决方法,但只是想知道这在 C# 中是否可行

【问题讨论】:

  • 你不能那样做。
  • StartNew() 不是构造函数
  • 你能做的最好的就是public static new Example StartNew() { var e = new Example(); e.Start(); return e; }
  • 通常以这种方式设计类是为了防止继承的特定目的。如果没有可访问的构造函数,则不能从该类继承。
  • 请出示您的真实案例,以便我们为您提供真正的帮助。

标签: c# inheritance constructor static


【解决方案1】:

基本上三种情况下不能从类继承:

  1. 预期的父类被声明为密封,禁止从它继承。
  2. 预期的父类没有可访问的构造函数。
  3. 预期的父类是静态类。

如果您处于这三种情况之一,您将无法从该类继承,简单明了,不要寻找可用的解决方法,因为没有。

【讨论】:

  • 案例 2 在技术上不正确。在 C# 5 中,您可以像这样声明类:class B { private B() } class D: B { D(): this(1) { } D(int i): this() { } },它不引用基类构造函数,因此它的可访问性无关紧要。
  • @PetSerAl 如果在 c#5 中编译(现在无法测试),那么这是编译器错误,而不是语言功能。它肯定不会在当前版本中编译,如果它在运行时你会得到一个 StackOverflowException。
猜你喜欢
  • 1970-01-01
  • 2014-06-26
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多