c# - 如何通过 ref 将参数传递给成员变量?
问题描述
从很久以前的 C++ 背景开始,对于 C# 来说还是很新的,所以我似乎在从 C# 中的指针过渡到 ref 时遇到了麻烦。
我有一个使用所示构造函数创建的类 (EColour)。
我分配(或至少尝试)对变量 m_template 的 cellTemplate 的引用。
在调试中查看,在构建时,m_template 绝对不是空的。
但是,当我开始处理 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;
解决方案
在 C# 中,我们有两种主要类型:
value type - its all digit types (int, float, double, long ...)
reference type -its types that inherited from object
ICellTemplate
是参考类。所以你需要什么 - 只需将它作为常规变量发送到参数中。
public class EColour
{
private ColourTemplate m_tamplate;
public EColour(ICellTemplate cellTemplate)
{
m_template = (ColourTemplate)cellTemplate;
}
}
推荐阅读
- android - Dagger 看不到我自己生成的依赖
- java - javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure(使用 Rest API,Oracle 云中的 JDK 7)
- laravel - 如何在 Laravel 中使用“LIKE”条件搜索两个表
- tfs - 使用相同 SQL Server 进行 Azure DevOps 迁移
- ios - 修复触摸在 UITableViewCell 内的 UILabel 上不起作用?
- java - 为什么程序显示空结果?
- c# - C# 索引和范围
- powerbi - 从 DAX 平均总数中删除空白
- java - 我从父 ArrayList 返回对象时遇到问题
- angular - 重新分配通过异步管道使用的 Observable