【问题标题】:Does new instance need to be created for delegate? [duplicate]是否需要为委托创建新实例? [复制]
【发布时间】:2021-04-19 04:17:33
【问题描述】:

我只是在玩委托,但我对它的工作感到困惑。 在下面的代码中

public delegate void HelloFunctionDelegate(string Message);

public static void Main()
{
    //HelloFunctionDelegate del = new HelloFunctionDelegate(Hello1);
    //del("hello from delegate");
    Console.WriteLine("Hello World");       
    Hello(Hello1);      
}

public static void Hello(HelloFunctionDelegate del)
{
    del("This is it");//we did not create instance of delegate 
}

public static void Hello1(string strMessage)
{
    Console.WriteLine(strMessage);
}

这里它是双向工作的。我们可以通过创建新实例(注释代码)而不创建委托的新实例(HelloFunctionDelegate)来传递方法吗?它们有什么区别?

【问题讨论】:

    标签: c# delegates


    【解决方案1】:

    没有区别。即使看起来您没有创建委托的新实例,您仍然隐式通过method group conversion 创建委托的新实例。 p>

    这里:

    Hello(Hello1);  
    

    方法组转换将方法组表达式Hello1 转换为委托类型HelloFunctionDelegate 的实例,如规范中所述:

    转换的结果是一个D类型的值,即一个新创建的委托,它引用了选定的方法和目标对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2011-06-08
      • 1970-01-01
      相关资源
      最近更新 更多