首页 > 解决方案 > 如何通过 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#parametersref

解决方案


在 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;
    }
}

推荐阅读