一个只能由其父类实例化的C#公共类。

4

是否有可能拥有一个嵌套类是公共的,但只能由其父类实例化,例如:

 public class parent
{
    public class child
    {
        public string someValue;
    }

    public child getChild()
    {
        return new child();
    }
}

在这个例子中,“child”类可以由“parent”之外的代码实例化。我希望外部代码能够查看“child”类型,但不能构建自己的“child”实例。
例如:
var someChild = new parent.child();
3个回答

16
  1. 创建一个公共接口。
  2. 将子类设为私有。
  3. 让子类实现该接口。
  4. getChild方法创建一个新的子类,并返回接口类型。

如评论和其他答案中所述,您还可以将内部类的构造函数访问修饰符更改为internal或private,同时保持内部类本身为public。


1
+1;此外,嵌套类中的internal构造函数也可能是合适的;是的,它不会阻止程序集内部的代码创建实例,但通常需要阻止其他程序集中的代码创建实例。 - Andras Zoltan

4

定义一个内部的空构造函数

public class child     
{         
    internal child() {}
    public string someValue;     
}  

2

您可以通过将子类的构造函数的保护级别设置为internal,来限制创建只能在您的程序集中进行。

或者像@Servy所说的那样,使用接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接