gpt4 book ai didi

c# - 如何创建返回实现接口(interface)的类的类型的方法的通用接口(interface)?

转载 作者:行者123 更新时间:2023-11-30 22:26:40 24 4
gpt4 key购买 nike

我正在寻找一种方法来定义下面的“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

我还没有真正关注这部分,只是对我的主要问题的理论结构更好奇。

最佳答案

您的问题有两种解释;一个是微不足道的,一个是不可能的,所以我将继续讨论这两个问题。

  1. 您想返回一个同时实现了 System.Type 的类型实例和 TInterface

    这很简单:只需使用 where TType : Typewhere TType : TInterface

  2. 您想返回 System.Type 的一个实例表示继承自 TInterface 的类型。

    这在 .NET(和 C#)类型系统中是不可能指定的。

    类型系统只能解析来自类型层次结构本身的信息,但不能强制执行“契约”,如受限的运行时属性值。有一些关于默认构造函数等的 hack,但据我所知,甚至无法测试现有方法(例如,与 C++ 模板不同,更不用说 Qi 等人了)。

更新

请查看Michael Graczyk的评论.

此外:我刚刚发现有适用于 .NET 的代码契约(Contract)检查器(静态和运行时):Microsoft DevLabs Code-Contracts for .NET .我从未使用过它们,甚至对它们都不陌生,但这看起来很有趣!

但是,即使不看,我也很确定重载解析等将无法使用此类信息。

关于c# - 如何创建返回实现接口(interface)的类的类型的方法的通用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com