0

そのため、共通のクラス セットのインターフェイスを作成するために、膨大な量の作業を行いました。アイデアは、各クラスがセット内で使用できるインターフェイスを作成することでしたが、最終的には各クラスが異なります。インターフェイスは共有メンバーを好まないことが判明しました。私が試したこと:

Public Interface ISomeInterface
Shared Property Meta() as Object
End Interface


Public Class A

Implements ISomeInterface
Shared Public Property Meta() as Object Implements ISomeInterFace.Meta
'Set/get methods
End Propery

Public Function Haduken() as Object
'perform Haduken
End Function
End Class


Public Class B

Implements ISomeInterface
Shared Public Property Meta() as Object Implements ISomeInterFace.Meta
'Set/get methods
End Propery

Public Function SonicBoom() as Object
'perform sonic boom
End Function
End Class

明らかに、これについて下調べをしていれば、共有メンバーはインターフェイスで使用できないことがわかっていたでしょう。共有メンバーの処理を個々のクラスに完全に任せるべきですか? 共有メンバーとの結合を最小限に抑える別の方法はありますか? 単一のインターフェースを実装する約 20 程度のクラスがあります。前もって感謝します。

4

2 に答える 2

2

これを回避する最も簡単な方法は、単にメンバーPrivateに転送するインターフェースを実装することですShared

Public Shared Property Meta As Object
  ' Get / Set methods
End Property

Private Property MetaImpl() as Object Implements ISomeInterFace.Meta
  Get 
    return Meta
  End Get
  Set
    Meta = Value
  End Set
End Propery

このパターンを使用すると、公開されている同じ API を維持しながら、インターフェイスを実装できます。

于 2011-09-30T16:13:42.307 に答える
0

インターフェースの各実装が独自の共有変数を使用する必要があるという考えであれば、JaredPar のアプローチは正しいものです。インターフェースのすべてのユーザーが同じ共有変数を参照する必要があるという考えである場合、(もしあれば) どのインスタンスを持っているかに関係なく、適切なアプローチは、インターフェースに似た名前のクラスを作成し、の共有メンバーを使用することです。そのクラス。これは、Enumerable<T>.Empty や Comparer<T>.Default などで使用されるアプローチです。

于 2011-10-02T18:13:05.563 に答える