gpt4 book ai didi

c# - 使用派生泛型派生类的实例调用方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:22 24 4
gpt4 key购买 nike

好吧,我有课了

class B<T> : A<T>
class L : K

和一个方法

void Method(A<K> a) {...}

我想做的是这个

var b = new B<L>();
Method(b); //error

但不可能将 b 转换为正确的类型。确实不可能进行此转换

A<K> t = new A<L>(); //error

我真的很想必须更改方法的内部结构。我可以毫无问题地更改 B 和/或 L。我是否有任何选择来做出某种解决方法?我想 Method 应该有可能在 b 上执行它的所有方法调用等,因为 B 派生自 A 而 L 派生自 K?

最佳答案

假设您使用的是 C# 4.0+,您需要将 A 的类型参数声明为协变的:

public class A<out T> where T : K
{
}

这应该允许您将 B 的变量传递给 A 的参数

更多信息:

Understanding Covariant and Contravariant interfaces in C#

显然,在 OOP 中,您可以将派生类型传递给声明为基类型的参数(这就是重点)。协变允许同样的事情 - 但对于类型参数,这正是您在这种情况下所需要的。

关于c# - 使用派生泛型派生类的实例调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19624018/

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