繁体   English   中英

将基础构造函数阻塞到子类

[英]Block base constructor to child class

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

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

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
    {
    }
}

您需要使用正确的基类构造函数来执行您想要的操作:

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

请注意, Child构造函数体现在使用受保护的字段X ,而不是参数x

只需省略无参数构造函数。 现在,每个派生类都被强制调用public BaseClass(int x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM