这个问题类似于c# 内部抽象类,如何在外部隐藏使用,但我的动机不同。这是场景
我从以下内容开始:
internal class InternalTypeA {...}
public class PublicClass
{
private readonly InternalTypeA _fieldA;
...
}
上面编译得很好。但后来我决定我应该提取一个基类并尝试编写以下内容:
public abstract class PublicBaseClass
{
protected readonly InternalTypeA _fieldA;
...
}
因此问题是,受保护的成员在程序集外部可见,但属于内部类型,因此无法编译。
手头的问题是我如何(或者我可以?)告诉编译器只有与 PublicBaseClass 相同的程序集中的公共类可以从它继承,因此 _fieldA 不会暴露在程序集之外?
还是有另一种方法来做我想做的事情,拥有一个公共超类和一组公共基类,它们都在同一个程序集中,并在它们的公共(“受保护”)代码中使用该程序集的内部类型?
到目前为止,我唯一的想法是:
public abstract class PublicBaseClass
{
private readonly InternalTypeA _fieldA;
protected object FieldA { get { return _fieldA; } }
...
}
public class SubClass1 : PublicBaseClass
{
private InternalTypeA _fieldA { get { return (InternalTypeA)FieldA; } }
}
public class SubClass2 : PublicBaseClass
{
private InternalTypeA _fieldA { get { return (InternalTypeA)FieldA; } }
}
但那是丑陋的!