公开内部类作为公共财产

时间:2011-06-01 10:57:45

标签: .net encapsulation public class-library internal

在我正在处理的类库中,我有一个包含许多属性的类,所以我将它重构为由一些较小的内部类组成。但是,现在我将这些类标记为 internal ,当我将它们作为原始类的公共属性公开时,代码将无法编译。例如:

public class TheOriginalClass
{
    public MyInternalClass InternalClassProperty { get; set; }
}

// It doesn't make sense to use this by itself
internal class MyInternalClass
{
    public string InterestingProperty { get; set; }
}

理想情况下,我想在程序集中封装这些 helper 类,因为它们在其他地方实例化是没有意义的。

有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:6)

internal类作为public属性的静态类型没有意义。另一个程序集中该属性的使用者将无法对其执行任何有用的操作。

也许您希望public辅助类具有internal构造函数,以防止其他人创建它。

或者将属性的类型设置为公共接口,并在内部类中实现该接口。

答案 1 :(得分:2)

如果您将该课程的内容暴露给外部世界,请将其标记为public,以便您稍后知道该课程是公开的,因此您不愿意更改公众界面经常如此。标记为internal是没有意义的,如果那不像那样内部。

如果你真的想要它,在检索程序集中的类(及其构造函数)时,使用带有调用程序集的反射和绑定标志BindingFlags.NonPublic

答案 2 :(得分:2)

如果内部类实现了公共接口,则可以简单地将该实例公开为接口类型。