gpt4 book ai didi

c# - 在 C# 中使用泛型参数调用委托(delegate)

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:08 29 4
gpt4 key购买 nike

我有一个类:

public class MyClass<T>
{
public string TestProperty { get; set; }
}

我想创建一个委托(delegate)来运行这个类的实例,例如:

Action<MyClass<object>> myDelegate = myclass => myclass.TestProperty = "hello";

但是,上面的委托(delegate)不能用 MyClass<object> 以外的任何东西调用。 ,例如 MyClass<DateTime>MyClass<string> .

如何定义委托(delegate)或修改委托(delegate),以便我可以在 MyClass<T> 上执行委托(delegate)其中 T是任何扩展 object 的东西?

编辑:可以等到 C# 4,如果那是可能的时候(如果可以,请仍然告诉我怎么做)虽然我更愿意继续现在是 3.5

编辑:我实际上也有二等舱:

public class MyDerivedClass<T1, T2> : MyClass<T1>
{
public int OtherProp { get; set; }
}

理想情况下,我喜欢使用以下语法来定义一些委托(delegate):

CreateDelegate<MyClass<object>>(mc => mc.TestProperty = "hello");
CreateDelegate<MyDerivedClass<object, object>>(mc => mc.OtherProp = 4);

然后给定一个对象,id喜欢看哪个委托(delegate)参数匹配,然后运行它们

这可能吗?我有哪些替代方案来创建此类委托(delegate)?

谢谢

最佳答案

编辑:进一步考虑后,我认为 C# 4 在这种情况下实际上不会帮助您。你需要 MyClass type 本身是变体,但它不可能是因为它是一个类。然而……

您可以编写一个通用方法来返回一个特定的操作:

public Action<MyClass<T>> NewTestPropertyDelegate<T>()
{
return myclass => myclass.TestProperty = "hello";
}

编辑:我之前应该提到 Andrew Hare 的建议 - 但这是使用基类而不是接口(interface)的另一种选择。

public abstract class MyClass
{
public string TestProperty { get; set; }
}

public class MyClass<T> : MyClass
{
...
}

然后使用Action<MyClass> .

关于c# - 在 C# 中使用泛型参数调用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684276/

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