class 图中的初始化委托

initialized delegates in class diagram

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

我在 class 中定义了一个委托,名为 UserMessage:

public delegate void ProcessUserMessage(UserMessage message);

我在另一个 class:

中使用这个委托
public UserMessage.ProcessUserMessage ProcessUserMessage;

到目前为止没有问题。

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

public UserMessage.ProcessUserMessage ProcessUserMessage = delegate { };

但是当我这样做并重新打开 class 图时,加载失败,显示:

Code could not be found for one or more shapes in class diagram 'ClassDiagram1.cd'. Do you want to attempt to automatically repair the class diagram?

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

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

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


更新: 我创建了一个只有失败代码的空白项目:

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

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

奇怪的是,MainWindow 的 class 图加载正常,但 UserMessage 加载失败。但是我没有改变 UserMessage 的任何东西。

如果我将 class MainWindow 更改为:

,它加载正常
public partial class MainWindow
{
    public UserMessage.ProcessUserMessageDelegate ProcessUserMessage;
}

找到解决方案...

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

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

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