1

基本クラス:

Public MustInherit Class Connector

    Public Event Changed as EventHandler

End Class

インターフェース:

Public Interface IPlug

    Event Changed as EventHandler

End Interface

派生クラス:

Public Class OutputConnector
    Inherits Connector
    Implements IPlug

    Event Changed as EventHandler Implements IPlug.Changed

End Class

VB.Net の問題:

もちろん、のイベントはのChangedイベントとOutputConnector衝突します。しかし、インターフェイスを満たすために実装する必要があります。ChangedConnectorIPlug

どうすればこれを解決できますか?

イベントを持つ必要があるが、実装しない必要がConnectorある (クラスなど)から派生した他のクラスがあります。また、名前の競合を回避するためだけに、実装している派生クラスに追加のイベントを持たせたくありません(これは、基本クラスまたはインターフェイスのいずれかでイベントの名前を変更した場合に当てはまります)。InputConnectorChangedIPlugIPlug

助言がありますか?

編集:

問題は名前自体ではありませんが、派生クラスがそのインターフェイスイベントの実装を基本クラスの既存のイベントに何らかの方法でマップするようにしたいということです-派生クラスで追加のイベントを宣言する必要はありません(あらゆる種類のルーティングを使用)乱雑に起動する); 結局のところ、イベントは既に基本クラスに存在します! 私が必要としているのは、インターフェースにそれを知らせる方法です..

疑似的な解決策(説明のため)は、何かを効果的にすることができるようにすることです

Public Event MyBase.Changed Implements IPlug.Changed

派生OutputConnectorクラスで。

4

1 に答える 1

0

この質問は、インターフェイスの実装を明示的にする 2 つの方法を指摘しています。

  • 非公開にする
  • 実装の名前がインターフェース名と一致する必要がないという事実を利用してください。

したがって、どのように使用する予定かによって異なりますIPlug.Changed。常にインターフェイスを使用して対話する場合は、単純にプライベートにすることができます。それが必要な場合でもShadows、パブリック API を介して表示することはできません。

もう 1 つの方法は、宣言の新しい名前を決定することOutputConnector.IPlugChangedです。

どちらを選択するかは、すべてをどのように使用しているかによって異なります。

編集:

2 つのイベントの機能を同じにしたいようです。

その場合、最善の方法は、IPlug.Changed実装を別の名前で非公開にして非表示にすることです。

hiddenIPlug.Changedを作成したら、OnChange保護されたメソッド (作成したと仮定) を使用して 2 つをリンクし、がトリガーされたIPlugChangedときに呼び出します。OnChange

保護されたメソッドがない場合はOnChange、代わりに上記の呼び出しを実行するイベントを添付できます。イベントが呼び出される順序が心配な場合、これは機能しないことに注意してください。

最後のオプションは、カスタム構文を使用して変更をIPlug基本クラスにストリーミングすることです。

于 2013-02-12T03:47:05.880 に答える