在我正在处理的类库中,我有一个包含许多属性的类,所以我将它重构为由一些较小的内部类组成。但是,现在我将这些类标记为 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 类,因为它们在其他地方实例化是没有意义的。
有没有办法实现这个目标?
答案 0 :(得分:6)
将internal
类作为public
属性的静态类型没有意义。另一个程序集中该属性的使用者将无法对其执行任何有用的操作。
也许您希望public
辅助类具有internal
构造函数,以防止其他人创建它。
或者将属性的类型设置为公共接口,并在内部类中实现该接口。
答案 1 :(得分:2)
如果您将该课程的内容暴露给外部世界,请将其标记为public
,以便您稍后知道该课程是公开的,因此您不愿意更改公众界面经常如此。标记为internal
是没有意义的,如果那不像那样内部。
如果你真的想要它,在检索程序集中的类(及其构造函数)时,使用带有调用程序集的反射和绑定标志BindingFlags.NonPublic
。
答案 2 :(得分:2)
如果内部类实现了公共接口,则可以简单地将该实例公开为接口类型。