c# – 添加到方法组是否计为使用变量?

我从表单的代码获取以下代码示例:
protected void SomeMethod()
    {
        SomeOtherMethod(this.OnPaint);
    }

    private void SomeOtherMethod(Action<PaintEventArgs> onPaint)
    {
        onPaint += MyPaint;
    }

    protected void MyPaint(PaintEventArgs e)
    {
        // paint some stuff
    }

第二种方法(SomeOtherMethod)有resharper抱怨我.它说onPaint“在任何执行路径中都没有使用赋值”.

在我看来它被使用是因为我在绘制完成时调用方法列表中添加一个方法.

但通常当resharper告诉我这样的事情是因为我不理解C#的某些部分.就像当参数超出范围时,我添加到列表中的项目将被删除(或类似的东西).

我想我会问这里是否有人知道重塑者试图告诉我什么.

(旁注:我通常只是重写OnPaint.但我试图让OnPaint在另一个类中调用一个方法.我不想公开公开该方法,所以我想我会传入OnPaint组并添加它. )

解决方法

警告是正确的.考虑以下:
int X;
int Y;
void SomeMethod()
{         
    SomeOtherMethod(this.X);
}      
void SomeOtherMethod(int x)
{
    x += this.Y;
}

这里代码修改形式参数x,然后从不使用修改后的x.这不会修改“this.X”

你和代表做了同样的事情.您修改形式参数,然后从不使用结果;原始的“OnPaint”没有变化,就像我的例子中“X”没有变化一样.

请记住,仅仅因为委托是引用类型并不意味着在传递实例时传递对变量的引用.您正在传递对实例的引用,而不是对该实例的存储位置的引用.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...