2011-12-15 5 views
32

インターフェイスや抽象クラスにプロパティを含めるのがベストプラクティスかどうかは誰でも助けてくれますか?インターフェイスのC#プロパティ

私はInterfaceにメソッドシグネチャしか持たないと思いますか?

+0

[Interface vs Abstract Class(general OO)]の可能な複製(http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo) – MPelletier

+2

それはどのように偽薬ですか? Kyleが両方のインターフェースの下で指摘したように、抽象クラスはプロパティを持つことができるので、 "対"ここに。 – bryanmac

答えて

11

プロパティインタフェース

参照に微細である:

http://msdn.microsoft.com/en-us/library/ms173156.aspx

インタフェースは、メソッド、プロパティ、イベント、インデクサ、またはこれら4つのメンバー型のいずれか 組み合わせからなります。インターフェイスには、 の定数、フィールド、演算子、インスタンスコンストラクタ、デストラクタ、または の型を含めることはできません。静的メンバーを含むことはできません。インターフェイスメンバは が自動的に公開され、アクセス修飾子は含まれません。

+20

それが可能であるという理由だけで、OPが尋ねるようにベストプラクティスであるとは限りません。 –

12

インターフェイスでプロパティを使用することは完全に容認されます。私はいつもそれをする。

+0

多分それは好みの問題です。まあ、私はこれらの議論を忘れて、あなたがしていることと同じようにします。 – SWIIWII

6

インターフェイスまたは抽象クラスにプロパティを含めることは完全に有効です。

25

プロパティはメソッドの構文上の砂糖です。 "..." という希望のコードを示していること

String get_PropertyA() { ... } 
void set_PropertyA(String value) { ... } 

注:これは、このようなものになり、実行時に

String PropertyA { get; set; } 

私は財産を持っている:これを考えてみましょうコードジェネレータによってそこに置かれます。実際に私が言っていることは、プロパティはC#以外には実際には存在しないということです。私の例で示したようなコンビネーションを使ったメソッドにコンパイルするからです。私が何を言っているかを確認するには、リフレクションを使用して、反射したコードの外観を見てください。

ただし、実装で重要でないことがある場合は、インターフェイスにプロパティを設定することは悪い習慣です。たとえば、変数を設定して他の変数を更新する場合や、内部条件のためにプロパティを設定するとプロパティの割り当てが拒否される場合は、プロパティを使用しないでください。私はそれがインターフェイスを超えて適用される一般的なルールだと思う。

+2

あなたが指摘しているように、物事の期間は悪くないことです。それはデバッガに問題を引き起こし、重要な作業が行われることは、クラスの消費者には明らかではありません。インターフェイスの場合、実装がないので、自明ではないかどうかは判断できません。あなたがすることができるのは、その名前によるものではなく、定義作業によるものです。自然にメソッドを意味します。 – bryanmac

+1

getterプロパティのみを使用すると、DTOインターフェイスには理にかなっています。 – mbx

+0

私たちはどうやって非自明なことを定義しますか?私は、私のインターフェースのプロパティやメソッドにいくつかのメンバーを作るという決定に苦労してきました。 1つの実装では、フィールドのストレートセット/取得になりますが、別の実装ではフィールドのメンバーから値を抽出するために正規表現を実行する必要があります。インターフェイスのさまざまな実装がまだわからない場合は、どうやってそれが自明ではないかをどのように知ることができますか? –

1

私はこれにベストプラクティスがあるとは思わない。

プロパティ(実際にはメソッド)はインターフェイスで許可されています。これ以上のものは単なる意見です。これには、何か意見があることについての私の指摘も含まれます。

関連する問題