【发布时间】:2020-12-20 05:40:22
【问题描述】:
从很久以前的 C++ 背景开始,对 C# 还是很陌生,所以我似乎在从 C# 中的指针转换到 ref 时遇到了麻烦。
我有一个使用所示构造函数创建的类 (EColour)。
我分配(或至少尝试)将对 cellTemplate 的引用分配给变量 m_template。
在debug中看,在构建的时候,m_template肯定是NOT null的。
但是,当我开始处理 OnMouseClick 事件时,我收到了一个 null 异常错误,因为 m_template 已经神奇地变成了 null。
谁能说明我做错了什么以及如何解决它?
public EColour(ref ICellTemplate cellTemplate)
{
m_template = (ColourTemplate)cellTemplate;
}
protected override void OnMouseClick(DataGridViewCellMouseEventArgs e)
{
ColorDialog dlg = new ColorDialog();
dlg.AnyColor = m_template.AnyColour; // This throws an exception because m_template is null
base.OnMouseClick(e);
}
ColourTemplate m_template;
【问题讨论】:
-
这需要minimal reproducible example 才能看到发生了什么。确定是同一个对象吗?其他地方什么都没有触及变量?为什么还是变量
ref? -
它不能神奇地变为空。也许您正在查看班级的不同实例?也就是说,您不需要
ref关键字,它不会像您认为的那样做。您应该只在 C# 中将它用于在 C++ 中需要双指针typename**的情况。 C# 中的所有类都是引用类型,这意味着它们会自动作为引用传递,您无需为此做任何事情。 -
重新迭代: 1) 它不能神奇地变为空。你没有向我们展示一些重要的东西。 2) 最好的办法是您可以使用 minimal reproducible example 更新您的帖子
-
你能显示调用构造函数的方法吗?
标签: c# parameters ref