我有一个带有内部属性的泛型类型:
public abstract class MyBaseClass<T>
where T: IMyInterface
{
internal T MyProp { get; }
}
然后我有IMyInterface
的内部实现:
public interface IMyInterface { ... }
internal class MyInternalClass: IMyInterface { ... }
最后我有一个公共子类:
public class MySubClass:
MyBaseClass<MyInternalClass>
{
}
这个最后的课程会抛出一个错误:
可访问性不一致:基类
MyBaseClass<MyInternalClass>
的可访问性低于类MySubClass
只有两种类型都是public
,而内部泛型类型只能在内部显示。
为什么会这样?
它有办法绕过它(除了将MyInternalClass
更改为public
之外?)
答案 0 :(得分:0)
我认为没有直接的解决方法。对我来说,它闻起来像是滥用继承代码共享,但我无法确切知道。
你能不把内部资料放在一个完全内部的帮助对象上?
class InternalHelper<T> {
internal T MyProp { get; }
}
public class MySubClass
{
InternalHelper<MyInternalClass> helper;
}
现在不再需要在公共API表面区域中公开泛型。
如果要公开可以添加的接口类型的属性:
public IMyInterface MyProp => helper.MyProp;
通常,内部元素不应在公共API表面上公开。这包括基类型和泛型类型参数。