在构造函数中传递对类的引用

本文关键字:引用 构造函数 | 更新日期: 2023-09-27 18:01:54

我想在创建类的新实例时将对该类设置的引用传递给该类。然后,在某些情况下,应该更改所提供的设置。然而,当我试图这样做,我得到"不能使用ref或我们的参数'设置'内的匿名方法,lambda表达式或查询表达式"

class MyClass {
    private int setting;
    public MyClass(ref int setting) {
        SomeOtherClass someOtherClass = new SomeOtherClass();
        someOtherClass.SomeEvent += (s, e) => {
            setting = someOtherValue;
        };
    }
}

在应用程序中,我不得不大量使用"MyClass",并且必须为每个实例编写事件处理程序似乎很愚蠢,当每个实例之间的设置不同时。

我有什么办法可以做到这一点吗?

在构造函数中传递对类的引用

class MyClass {
    private int setting;
    public MyClass(Action<int> onNewSetting) {
        SomeOtherClass someOtherClass = new SomeOtherClass();
        someOtherClass.SomeEvent += (s, e) => {
            setting = someOtherValue;
            onNewSetting(setting);
        };
    }
}

在Main(或其他地方):

int local = 0;
var m = new MyClass(i => local = i);

传递一个带有lambda表达式的委托:

class MyClass 
{
    private int setting;
    public MyClass(ref int setting) 
    {
       SomeOtherClass instance = new SomeOtherClass(s => setting = s);
    }
}

class SomeOtherClass
{
    Action<int> changeValue;
    public SomeOtherClass(Action<int> method) { changeValue = method; }    
   // invoke it and pass new value where you need it :
   // void SomeWhereInCode() { changeValue(100); }
}