2017-02-25 102 views
-2

我不能低估,爲什麼我不能在code bellow中實例化出代表方法Run爲什麼不能實例化Runate方法的委託?

public class Tester 
{ 
    Media myMedia = new Media(); 
    AudioFile myAu = new AudioFile(); 
    VideoFile myVd = new VideoFile(); 
    //instantiate the delegates 
    Media.PlayerD MyDA = new Media.PlayerD(myAu.AudioPlay); 
    Media.PlayerD MyDV = new Media.PlayerD(myVd.VideoPlay); 

    public void Run() 
    { 
     //call the delegates 
     myMedia.Report(MyDA); 
     myMedia.Report(MyDV); 
    } 
} 
+0

我很抱歉,但我不能讓你的要求。你能否重新說明你的問題?你不明白你爲什麼要在類級別實例化代表,並將它們分配給類的兩個字段?你不明白爲什麼會遵循另一種方法 - 比如將它們安裝在稱爲「Run」的方法體內?謝謝 – Christos

+0

'myMedia'使用的'Media'類型是什麼? 'PlayerD'是嵌套在'Media'類型中的委託類型嗎?請顯示他們的定義(或提供一個鏈接到他們的文檔)。 –

+0

不幸的是,論壇無法編寫所有代碼。這是書的例子。通過委託傳遞兩個方法,並通過類Tester中的Run()方法調用它。爲什麼我不能實例化委託出Run()方法? –

回答

0

您:

Media.PlayerD MyDA = new Media.PlayerD(myAu.AudioPlay); 

非靜態字段(MyDA以上)的初始化不能使用其他非靜態字段(myAu)。

如果您將MyDA = new Media.PlayerD(myAu.AudioPlay);放入非靜態構造函數中,將會被允許。

(同爲MyDV,當然)。

+0

爲什麼不能使用?爲什麼我必須在方法內實例化代表? –

+0

這就是每個C#的設計。設計C#的人決定,如果類的非靜態數據依賴於其他非靜態數據,則必須在初始化順序和算法明確的構造函數中設置。看到像[字段初始值設定項不能引用非靜態字段,方法或屬性](http://stackoverflow.com/questions/14439231/)(您收到的錯誤消息)等其他線程。 __但你想達到什麼?__你也可以用'Media.PlayerD MyDA => myAu.AudioPlay;'創建一個'get'-only屬性。但是,每次都會返回一個新實例。 –

相關問題