gpt4 book ai didi

c# - 如何在 C# 中实例化泛型方法?

转载 作者:太空狗 更新时间:2023-10-29 21:18:46 24 4
gpt4 key购买 nike

假设我有一个通用方法:

void Fun<T>(FunArg arg) {}

this.Fun<Feature>this.Fun<Category>泛型方法的不同实例?

一般来说,泛型方法是如何被实例化的?不同的通用参数产生不同的方法,或者相同的方法连同在运行时使用的不同元数据?

请引用语言规范中的一些引文来支持您的回答。

另外,假设我做了这些:

client.SomeEvent += this.Fun<Feature>;   //line1
client.SomeEvent += this.Fun<Category>; //line2
client.SomeEvent += this.Fun<Result>; //line3

然后,

client.SomeEvent -= this.Fun<Feature>;   //lineX

lineX撤消我在 line1 所做的事情?或者它还取决于其他因素?

最佳答案

它们都共享一个方法定义,但在运行时它们是不同的MethodInfo - 因为泛型类型参数定义一个泛型方法。

支持插图:

    Action<FunArg> a1 = Fun<X>;
Action<FunArg> a2 = Fun<Y>;
Action<FunArg> a3 = Fun<Y>;
Console.WriteLine(a1.Method == a2.Method); // false
Console.WriteLine(a3.Method == a2.Method); // true

在JIT层面,比较复杂;任何引用类型的参数都将共享一个实现,因为引用就是引用就是引用(注意所有这样的T必须事先满足任何约束)。如果存在值类型 T,则泛型类型参数的每个组合在运行时都会获得单独的实现,因为每个组合都需要不同的最终实现。

关于c# - 如何在 C# 中实例化泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10278994/

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