【问题标题】:initialized delegates in class diagram类图中的初始化委托
【发布时间】:2015-11-23 10:22:31
【问题描述】:

我使用 Visual Studio 2015,并创建了一个类图来概述我最常用的类及其成员。

我在一个名为 UserMessage 的类中定义了一个委托:

public delegate void ProcessUserMessage(UserMessage message);

我在另一个类中使用这个委托:

public UserMessage.ProcessUserMessage ProcessUserMessage;

目前没有问题。

因为我讨厌每次都测试 null 的回调,所以我在初始化时连接了一个无操作事件处理程序,正如 here 建议的那样:

public UserMessage.ProcessUserMessage ProcessUserMessage = delegate { };

但是当我这样做并重新打开类图时,它无法加载,说:

在类图“ClassDiagram1.cd”中找不到一个或多个形状的代码。是否要尝试自动修复类图?

自动修复当然不起作用;-(

即使我将此初始化放在类的构造函数中,而不是在声明中,也会出现相同的错误。

我不明白出了什么问题。有什么线索吗?


更新: 我用失败的代码创建了一个空白项目:
public partial class MainWindow
{
    public UserMessage.ProcessUserMessageDelegate ProcessUserMessage = delegate { };
}

public class UserMessage
{
    public delegate void ProcessUserMessageDelegate(string foo);
}

奇怪的是 MainWindow 的类图加载正常,但对于 UserMessage 却失败了。但我不会为 UserMessage 更改任何内容。

如果我将 MainWindow 类更改为:

public partial class MainWindow
{
    public UserMessage.ProcessUserMessageDelegate ProcessUserMessage;
}

【问题讨论】:

  • 在包含最少元素的新项目中再试一次。目前尚不清楚您是否已确定错误的正确来源。
  • 我试过了,@HenkHolterman,但还是一样。有趣的是,它正确显示了主类图,但无法加载 UserMessage 类图。但是我在主类中进行了更改,而不是在 UserMessage 类中
  • 然后发布完整的源代码(不是图表),标记(注释掉)导致问题的原因。

标签: c# delegates class-diagram


【解决方案1】:

找到了解决办法……

匿名无操作委托必须符合委托定义,所以我只需要添加参数(本例中为(string foo)):

public partial class MainWindow
{
    public UserMessage.ProcessUserMessageDelegate ProcessUserMessage = delegate (string foo){ };
}

public class UserMessage
{
    public delegate void ProcessUserMessageDelegate(string foo);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2016-02-17
    • 2012-08-26
    相关资源
    最近更新 更多