我有一个接口,我想为它创建一个关于成员返回类型的泛型。
所以如果非泛型接口是:
interface IViewHolder{
IView View {get;}
}
而且我要
interface IViewHolder<TView> : IViewHolder {
where TView : class, IView
TView View {get;}
}
这样我就可以在IViewHolder<T>
任何需要 IViewHolder 的地方使用,我必须在泛型中为 View 成员使用 new 关键字,否则它不会编译。
由于这似乎“不对”,我研究了 MS 如何使用反射器在框架中做到这一点。
所以IEnumerable<T>
他们这样做:
[TypeDependency("System.SZArrayHelper"), __DynamicallyInvokable]
public interface IEnumerable<out T> : IEnumerable
{
[__DynamicallyInvokable]
IEnumerator<T> GetEnumerator();
}
不需要新的关键字。那么他们的秘密是什么。