gpt4 book ai didi

c# - C# 中的委托(delegate)错误

转载 作者:太空狗 更新时间:2023-10-30 01:26:04 24 4
gpt4 key购买 nike

我的代码如下:

class PropertyRetrievalClass
{
public delegate object getProperty(string input);

public object get_Chart_1(string iput)
{
Console.WriteLine(iput);
return "";
}
public object get_Chart_2(string iput)
{
Console.WriteLine(iput);
return "";
}

public PropertyRetrievalClass() { }
}

public static void Main()
{
int i = 1;
PropertyRetrievalClass obj = new PropertyRetrievalClass();

Delegate del = Delegate.CreateDelegate(typeof(PropertyRetrievalClass), obj, "get_chart_" + i.ToString());
string output= del("asldkl");
}

它给我一个错误,说“错误 CS0118:‘del’是一个‘变量’,但像‘方法’一样使用”

我应该怎么做才能使用这个委托(delegate)?我想调用“get_chart_1”或“get_chart_2”函数中的任何一个,并且它们都接受字符串输入?

提前致谢...

最佳答案

您的代码中有两个问题。

  • Delegate 对象不是方法,因此您需要在 Delegate 对象上使用方法来调用它引用的方法
  • CreateDelegate 的第一个参数应该是委托(delegate)类型,而不是包含您要调用的方法的类。

完整的工作示例:

public delegate void ParamLess();
class SomeClass
{
public void PrintStuff()
{
Console.WriteLine("stuff");
}
}
internal class Program
{
private static Dictionary<int, int> dict = null;
static void Main()
{
var obj = new SomeClass();
Delegate del = Delegate.CreateDelegate(typeof(ParamLess), obj,
"PrintStuff", false);
del.DynamicInvoke(); // invokes SomeClass.PrintStuff, which prints "stuff"
}
}

在您的情况下,Main 方法应如下所示:

public static void Main()
{
int i = 1;
PropertyRetrievalClass obj = new PropertyRetrievalClass();

Delegate del = Delegate.CreateDelegate(
typeof(PropertyRetrievalClass.getProperty),
obj,
"get_Chart_" + i.ToString());
string output = (string)del.DynamicInvoke("asldkl");
}

更新
请注意,CreateDelegate 对方法名称区分大小写,除非您告诉它不要这样做。

// this call will fail, get_chart should be get_Chart
Delegate del = Delegate.CreateDelegate(
typeof(PropertyRetrievalClass.getProperty),
obj,
"get_chart_" + i.ToString());


// this call will succeed
Delegate del = Delegate.CreateDelegate(
typeof(PropertyRetrievalClass.getProperty),
obj,
"get_Chart_" + i.ToString());


// this call will succeed, since we tell CreateDelegate to ignore case
Delegate del = Delegate.CreateDelegate(
typeof(PropertyRetrievalClass.getProperty),
obj,
"get_chart_" + i.ToString(),
true);

关于c# - C# 中的委托(delegate)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5729683/

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