内部继承的通用属性不允许内部类型

时间:2016-05-25 12:28:04

标签: c# generics internal

我有一个带有内部属性的泛型类型:

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之外?)

1 个答案:

答案 0 :(得分:0)

我认为没有直接的解决方法。对我来说,它闻起来像是滥用继承代码共享,但我无法确切知道。

你能不把内部资料放在一个完全内部的帮助对象上?

class InternalHelper<T> {
 internal T MyProp { get; }
}

public class MySubClass
{
 InternalHelper<MyInternalClass> helper;
}

现在不再需要在公共API表面区域中公开泛型。

如果要公开可以添加的接口类型的属性:

public IMyInterface MyProp => helper.MyProp;

通常,内部元素不应在公共API表面上公开。这包括基类型和泛型类型参数。