c# - block 基构造函数到子类

标签 c# constructor

我确定这个问题在其他地方,但找不到。

我有一个抽象类,它将作为其他类的基础。 希望基类的基构造函数不可访问,并且子类无法编辑行为,从而迫使它们使用另一个构造函数。

public abstract class BaseClass
{
    protected int X;
    private BaseClass() { } // Problematic accessor
    public BaseClass(int x)
    {
        X = x;
    }
}

public class Child : BaseClass
{
    public Child(int x)
    {
        X = x + 5;
    }
}

如果我将 BaseClass() 基构造函数设置为私有(private),它不会编译,但如果我将它设置为 protected ,则 Child 可以覆盖它。

有办法阻止 Child 修改基础构造函数吗?

编辑:我希望基础构造函数在类外也不可访问。

最佳答案

如果你不想在

中做任何事情
  BaseClass()

构造函数,只需删除它(BaseClass 有一个显式构造函数,这就是为什么没有默认 一):

  public abstract class BaseClass
  {
      //TODO: probably you want a property to read X
      private int X; // <- private looks better for fields
      public BaseClass(int x)
      {
          X = x;
      }
  }

对于 Child 类,您必须调用其基础构造函数,即 base(int x):

public class Child : BaseClass
{
    public Child(int x)
      : base(x + 5) // since X is private, let's move logic into the call
    {
    }
}

关于c# - block 基构造函数到子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521170/

相关文章:

java - Lombok:@RequiredArgsConstructor 从final 创建构造函数,但不是从@NotNull 创建构造函数

c# - 在异步调用中保留线程的上下文

c# - EF-Code First : Unable to create a constant value of type '' . Only primitive types ('such as Int32, String, and Guid' ) are supported in this context

c# - Roslyn 可以从对象实例生成源代码吗?

c# - 完全删除 "App.xaml"并创建自己的入口点,后果是什么?

java - 覆盖java子类中的参数化构造函数

c# - C# 中的构造函数

c# - MVC : Problems to pass currency in decimal parameter

.net - 构造函数优先级

c++ - 即使禁用了优化,Visual Studio 也会优化吗?