创建内部类的公共属性?

创建内部类的公共属性?

问题描述:

假设我有这样的情况:创建内部类的公共属性?

基类或母类,声明这种结构:

public static class Mother 
{ 
    private static Childs _child = new Childs(); 

    public static Childs Child 
    { 
      get { return _child; } 
    } 
} 

怎么可以看到我想要实现一个单基类访问所有的方法在一个地方如:Mother.Child.SomeMethod。

有了这个结构,我有更好的代码组织。

现在我想让Childs类只作为内部,所以这里开始问题因为我不能创建一个内部类的公共属性。内部类的结构如下:

internal class Childs 
{ 
    public static bool SomeMethod() { ... } 
} 

那么我该如何制作一个内部类的公共属性?

+0

'public'只表示“尽可能公开”。由于该类是“internal”,因此该方法具有相同的最大可见性:仅在同一个程序集中才可见。 –

如果孩子是内部的,静态接入点也应该是内部的。

如果您确实想公开访问某些儿童的成员,请考虑使用界面。

无论如何,如果有一个静态接入点,您不需要使成员静态。

public static class Mother 
{ 
    private static Child _child = new Child(); 

    public static IChild Child 
    { 
      get { return _child; } 
    } 
} 

public interface IChild 
{ 
    // public stuff here 
    bool SomeMethod(); 
} 


internal class Child : IChild 
{ 
    public bool SomeMethod() { ... } 
    // additional internal members here 
} 

你不能那样做。如果该财产是公共的,任何其他类都可以访问它。但是如果他们能够得到它,他们也必须能够访问正在接收的课程。

继承树中的所有类必须至少具有与层次结构中最高类相同的可见性。没有办法从一个内部类派生一个公共类。

也许你的Childspublic。如果你愿意,你可以使它abstract防止实例化它或使构造函数内部阻止在另一个程序集中派生它。

+0

如果我将它声明为公共抽象,我可以在antoher程序集中看到它,也许我理解错了吗? – Unchained

+0

您可以看到它,但无法重复使用。由于最高级别是“公共”,因此无法将其从另一个程序集中隐藏起来。所有的课程都需要公开。 –

+0

嗯,'abstract'不会阻止它们继承它吗?为此你使用'密封'。 – juunas