我正在寻找一种方法来定义下面的“MethodA”,以便它返回一个类定义(System.Type),其中所述类型的实例实现“InterfaceB”
interface IMyInterface
{
TType MethodA<TType, TInterface>()
: where TType : System.Type
: where [instanceOf(TType)] : TInterface
}
(注意:instanceOf 当然不是真实的......)
我怀疑不可能在编译时获得这种验证。我希望有人能证明我错了。
预先感谢您的任何指导。
编辑:我更新了这个,希望更具体地说明返回的是 System.Type,后面的代码可以执行它:
var classType = myInterface.MethodA<(something, ISomeInterface)>();
ISomeInterface = new classType(); //--Assuming default constructor
我还没有真正关注这部分,只是对我的主要问题的理论构建更好奇。
最佳答案
您的问题有两种解释;一个是微不足道的,一个是不可能的,所以我将继续讨论这两个问题。
您想要返回同时实现
System.Type
的类型的实例。和TInterface
。这很简单:只需使用
where TType : Type
和where TType : TInterface
。您想要返回
System.Type
的实例表示继承自TInterface
的类型。这是不可能在 .NET(和 C#)类型系统中指定的。
类型系统只能解析来自类型层次结构本身的信息,但不能强制执行诸如受限运行时属性值之类的“契约”。有一些关于默认构造函数等的 hack,但据我所知,甚至无法测试现有方法(例如,与 C++ 模板不同,更不用说 Qi 等人了)。
更新
请查看Michael Graczyk的评论.
另外:我刚刚发现 .NET 有代码契约检查器(静态和运行时):Microsoft DevLabs Code-Contracts for .NET 。我从未使用过它们,甚至对它们也不陌生,但这看起来很有趣!
但是,即使不看,我也很确定重载解析等将无法使用此类信息。
关于c# - 如何创建返回实现接口(interface)的类的类型的方法的通用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659526/