C# 在构造函数中传递对 class 的引用
C# Passing reference to class in constructor
我想在创建 class 的新实例时将对设置的引用传递给 class。然后应该在某些情况下更改提供的设置。但是,当我尝试这样做时,我得到 "Cannot use ref or our parameter 'setting' inside an anonymouse method, lamda expression or query expression"
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); }
}
我想在创建 class 的新实例时将对设置的引用传递给 class。然后应该在某些情况下更改提供的设置。但是,当我尝试这样做时,我得到 "Cannot use ref or our parameter 'setting' inside an anonymouse method, lamda expression or query expression"
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); }
}