我想傳遞一個委託作爲參數的一類這樣的傳遞委託給不工作
class Foo
{
protected delegate void CreateResource(object parameter);
protected Foo(CreateResource res)
{
}
public Foo(string resourceName)
: this(CreateStreamRes) // Compiler error
{
}
protected void CreateStreamRes(object o)
{
}
}
的構造函數,但我得到的註釋行下面的編譯器錯誤構造函數:「一個對象引用對於非靜態字段,方法或屬性「CreateStreamRes(object)'」是必需的。
但是如果我添加一個變量在構造函數中這樣
public Foo(string resourceName)
: this(CreateStreamRes) // Compiler error
{
CreateResource cr = CreateStreamRes; // OK
}
它編譯該行成功。
看起來像C#將構造函數視爲靜態方法。因爲如果我添加靜態關鍵字到CreateStreamRes(object o)方法它編譯好。
有人可以解釋我爲什麼會發生這種情況?
謝謝你們。你說的對象還沒有創建。我認爲這是唯一的情況下,我們可以在對象構建之前調用方法,這就是爲什麼當我看到錯誤時我被震驚。謝謝@達仁我已經按照你的建議進行了重構,現在可以工作。 – Michelle