【问题标题】:Initialize Multiple Delegate of Same Datatype初始化相同数据类型的多个委托
【发布时间】:2017-05-15 17:45:36
【问题描述】:

我正在使用 Windows 窗体并使用线程安全概念来设置主线程控件的值,这里我有两个委托,一个用于不带参数,另一个用于传递参数,但我发现不可能这样做,因为它说

表单已经包含 StringArgReturningVoidDelegate 的定义

委托声明

    delegate string StringArgReturningVoidDelegate();

    delegate void StringArgReturningVoidDelegate(string text);

【问题讨论】:

  • AFAIR 使用 delegate 关键字是一个 (c# ?) 编译器功能,使用时它实际上会创建一个普通的 C# 类型:class StringArgReturningVoidDelegate,然后这个类被事件和实际用作类型持有对方法的引用的变量。这就是为什么你不能有相同的名字。快速修复:使用其他名称。
  • 当我使用 Class 作为委托名称时,如何重命名委托?
  • 您不必使用与包含类型名称相同的名称。其实他们不必属于类,你可以直接define delegate in the namespaceNaming delegates 实际上是一个主题。目前有Action<>Func<> 泛型来定义方法指针和EventHandler<> 用于事件。我什至不确定是否需要继续使用delegate 关键字。换句话说,不要定义委托类型,首先使用Func<string>,其次使用Action<string>

标签: c#


【解决方案1】:

代表必须在其封闭类型/命名空间内唯一命名。我告诉你第一个应该是NoArgsReturningStringDelegate,但是:只使用Func<string>Action<string> 而不是声明你自己的委托类型会更容易......

【讨论】:

    【解决方案2】:

    不可以。您不能重载委托。

    关于原因的一些提示: C# - How can I "overload" a delegate?

    一些解决方法,你可以在这个答案中找到: https://stackoverflow.com/a/41574140/4054186

    【讨论】:

    • 感谢大家的指导。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2018-01-08
    相关资源
    最近更新 更多