[英]C# Passing reference to class in constructor
創建類的新實例時,我想將對設置的引用傳遞給類。 然后,在某些情況下,應當更改提供的設置。 但是,當我嘗試執行此操作時,出現“無法在匿名方法,lamda表達式或查詢表達式中使用ref或我們的參數'setting'”
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); }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.