作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在努力实现这样的目标:
interface IAbstract
{
string A { get; }
object B { get; }
}
interface IAbstract<T> : IAbstract
{
T B { get; }
}
class RealThing<T> : IAbstract<T>
{
public string A { get; private set; }
public T B { get; private set; }
}
所以我可以这样做:
RealThing<string> rt = new RealThing<string>();
IAbstract ia = rt;
IAbstract<string> ias = rt;
object o = ia.B;
string s = ias.B;
这可能吗?
最佳答案
非常接近。三件事:
你应该使用 new
在IAbstract<T>
表明您知道您正在隐藏现有成员:
new T B { get; }
但即使没有它,您仍然只会收到警告。
您需要实现 IAbstract.B
在 RealThing
内,你几乎肯定应该使用显式接口(interface)实现,委托(delegate)给强类型成员:
object IAbstract.B { get { return B; } }
在您的测试代码中,您需要为 RealThing
指定类型参数:
RealThing<string> rt = new RealThing<string>();
这很好,甚至在您希望能够获得接口(interface)的非泛型形式时也是一种相当常见的模式。
关于c# - 泛型 IAbstract<T> 继承自 IAbstract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23724772/
我正在努力实现这样的目标: interface IAbstract { string A { get; } object B { get; } } interface IAbstrac
我是一名优秀的程序员,十分优秀!