簡體   English   中英

C#在構造函數中傳遞對類的引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM