如何使构造函数只能由基类访问?

Jür*_*ock 8 .net c# inheritance constructor

如果我想要一个只能从子类访问的构造函数,我可以使用protected构造函数中的关键字.

现在我想要相反的.

我的子类应该有一个构造函数,可以通过其基类访问,但不能从任何其他类访问.

这甚至可能吗?

这是我目前的代码.问题是子类有一个公共构造函数.

public abstract class BaseClass
{
    public static BaseClass CreateInstance(DataTable dataTable)
    {
        return new Child1(dataTable);
    }
    public static BaseClass CreateInstance(DataSet dataSet)
    {
        return new Child2(dataSet);
    }
}

public class Child1 : BaseClass
{
    public Child1(DataTable dataTable)
    {
    }
}

public class Child2 : BaseClass
{
    public Child2(DataSet dataSet)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

svi*_*ick 13

我想你有两个选择:

  1. 制作子构造函数internal.这意味着它可以从同一个程序集中的所有类型访问,但在大多数情况下应该足够了.
  2. 使子类嵌套在基类中:

    public abstract class BaseClass
    {
        public static BaseClass CreateInstance(DataTable dataTable)
        {
            return new Child1(dataTable);
        }
    
        private class Child1 : BaseClass
        {
            public Child1(DataTable dataTable)
            {
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这样,BaseClass可以使用构造函数,但没有其他外部类型可以这样做(甚至可以看到子类).

  • 嵌套类只能在BaseClass中可见,对吗?不确定这是什么意思. (2认同)

Pra*_*ana 2

问题的答案是“否”

OOP 中不存在允许子类构造函数仅对其基类可见的东西......