指定泛型,其中 T 应该是接口
我正在考虑一种通用方法,其中 T 应该是接口,但它可以是 IFace 的后代,
public static T Get<T>(SomeClass foo) where T : IFace {
if(smthing)
return Activator.CreateInstance(type, true);
}
所以我可以调用
Class.Get<IFace>(smth)
Class.Get<IFaceDescend>(smt)
但不能
Class.Get<Class2>(smt)
I was thinking of a generic method where T should be interface but it can be the descendant of IFace
public static T Get<T>(SomeClass foo) where T : IFace {
if(smthing)
return Activator.CreateInstance(type, true);
}
so i can call
Class.Get<IFace>(smth)
Class.Get<IFaceDescend>(smt)
but not
Class.Get<Class2>(smt)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,你不能这样做。您可以在执行时测试它:
...但您不能将其表示为
T
上的编译时约束。No, you can't do this. You can test for it at execution time:
... but you can't express it as a compile-time constraint on
T
.这在当前的 C# 中是不可能的。
您唯一能做的就是在运行时验证事实,使用类似的东西
(请注意,我认为没有
TypeArgumentException
这可能是一个更好的选择。)This is not possible in current C#.
The only thing you can do is to validate the fact on runtime, using something like
(Note that there is no
TypeArgumentException
which might be a better choice, I guess.)