2012-05-16 42 views
4

是否有可能具有公共的嵌套类,但只能通过其父类 (例如,只能由其父类实例化的c#公共类

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

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

在这个例子中,'child'类可以通过'parent'外部的代码实例化。我希望外部代码能够查看“子”类型,但不能构建它自己的类型。

e.g

var someChild = new parent.child(); 

回答

13
  1. 做一个公共接口。
  2. 使孩子班级私密。
  3. 使孩子实现界面。
  4. getChild方法创建一个新子并返回接口类型。

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

+1

1;嵌套类上的'internal'构造函数也可能是合适的;是的,它不会阻止程序集内创建实例的代码 - 但通常它是其他程序集中的代码必须被阻止 –

2

您可以通过将构造函数(子类的构造函数)的保护级别设置为internal来将创建限制为您的程序集。

或由@Servy告知的接口。

3

限定内部空构造

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