2017-02-25 6 views
-2

私はアンダーディンドできません。なぜ、コードのデリゲートをインスタンス化する必要はありませんか?デリゲートをメソッドからインスタンス化しないでください。

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

私は申し訳ありませんが、私はあなたが求めているものを手に入れることができません。あなたの質問に言い換えていただけますか?なぜ、クラスレベルでデリゲートをインスタンス化し、それをクラスの2つのフィールドに割り当てるのか理解できません。 'Run'というメソッドの本体の内部にそれらを導入するような別のアプローチが続いている理由を理解できませんか?ありがとう – Christos

+0

'myMedia'に使用される' Media'タイプは何ですか? 'PlayerD'は' Media'型の中にネストされたデリゲート型ですか?定義を表示してください(またはドキュメントへのリンクを提供してください)。 –

+0

残念ながら、フォーラムはすべてのコードを書くことができませんでした。これは本の例です。デリゲートを介して2つのメソッドを渡し、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'だけのプロパティを作成することもできます。ただし、毎回新しいインスタンスが返されます。 –

関連する問題