0

私は次のコードを持っています

public delegate void NotificacaoScanner(NotifScanner e);   

// interface
public interface IScanner
{
   event NotificacaoScanner onFinalLeitura;
}


// abstract class that implements the interface
public abstract class ScannerGCPerif : IScanner
{
   public virtual event NotificacaoScanner onFinalLeitura;
   {
     add { throw new NotImplementedException("Event not available for this service"); }
     remove { throw new NotImplementedException("Event not available for this service");          }
   } 
}


// concrete class that implements the abstract class
public class ScannerBurroughs : ScannerGCPerif
{
  public override event NotificacaoScanner onFinalLeitura;
}

onFinalLeituraインスタンスのイベントをサブスクライブするScannerBurroughsと、例外が存在する基本クラス (ScannerGCPerif) のイベント宣言の実行が要求されるのはなぜですか?

4

1 に答える 1

0

コードを実行しましたが、例外は発生しませんでした。何が起こるか説明しましょう:

具体的なクラスでイベントをオーバーライドしますが、イベント ハンドラーを追加および削除するための実装を提供しないため、コンパイラーは次のコードを生成します。

public class ScannerBurroughs : ScannerGCPerif
{
    private NotificacaoScanner _onFinalLeitura; // Declare a private delegate

    public override event NotificacaoScanner onFinalLeitura
    {
        add { _onFinalLeitura += value; }
        remove { _onFinalLeitura -= value; }
    }
}

舞台裏では、プライベート デリゲートを追加し、追加/削除イベント アクセサーを自動実装します。サブスクライブ時に基本実装が呼び出されることはありません。アクセサーを明示的に実装し、コードにいくつかのブレークポイントを配置して、何が起こるかを確認してください。

于 2013-03-23T20:54:53.163 に答える