2011-02-09 7 views
2

私のコードにパターンがあることに気付きました。私は通常、privateではなく、protectedを、私のクラスの "hidden"メソッドとフィールドのデフォルトアクセスラベルとして選択します。私は主に、クラスのユーザーのために機能するクラスについての詳細を隠していますが、今後も拡張のためのスペースを残しているためです。このコーディング "ポリシー"に欠点はありますか?私はいつか私のクラスを拡張する必要があるかもしれないので、私は "プライベート"の代わりに "保護された"を使用しています、それは悪いですか?

は、私は欠点がないと思うあなた
Tunnuz

+1

いずれかの選択肢を作るためには*理由*が必要です。答えを構成するにはどうすればいいか分かりません。将来のサブクラスが特定のメソッドをオーバーライドする必要がある場合は、それを 'protected'にしてください。オーバーライドする必要がない場合(つまり、このクラスを元に戻し、オーバーライドするとクラスを完全に破る統合された機能)、非公開にします。私はこのドライブを理解していないので、私はここで頻繁に見られる "ワンサイズのルール"を見つけることができます。 –

+0

もちろん、コード作成時に理由を挙げる必要があります。しかし、いつかクラスを延長できるかどうかわからない状況があります。 – tunnuz

答えて

4

一般的に言えば、いつかあなたは実装やヤダヤダをやらなければならないかもしれないから(何かを作ってはいけません。クラス内でのみ使用するメソッドがある場合は、プライベートにします。継承によって拡張する必要がある場合は、どの関数がベローからアクセスしなければならないかを再考する必要があります。私はいつも私のスーパークラスにメソッドを抽象化していますので、私はとにかくいつ、どこで必要なのか考えなければなりません。

プライベートメソッドについて私が言ったことを無視するのが良い理由は、あなたの内部機能、すなわち単体テスト。 C#では、保護されたメソッドを別のプロジェクトで外部から参照できるようにすることができます。

+0

'private'は' protected'よりも本当に有利な唯一の時間は、将来のバージョンの基本クラスが問題のメンバの振る舞いを変えることによって利益を得られるかどうかということです。さもなければ、将来のバージョンのベースがその振る舞いを変えたいと思う理由を明言できなければ、未来の派生クラスは問題のメンバーにアクセスできることから利益を得ている可能性が高いと私は示唆している。 – supercat

1

ありがとうございます。

  • プライベート変数は、それらが属するクラスのみが参照できる変数です。
  • 保護された変数は、それらが属しているクラスおよびすべてのサブクラスでのみ表示される変数です。

あなたのコードですべてが正常である必要があります。それについて何も「悪い」ものはありません。おそらくあなたのクラスを拡張する場合、保護されたプロパティは間違いなく正しいでしょう。

2

カプセル化のためにプライベートを選択する必要があります。私はこの主題について控えめなアプローチを好みます、私は個人的なアクセス修飾子を好む、もし私が保護されたアクセス修飾子を選択していくつかの拡張を期待するならば。プライベートではなくプロテクトされた修飾子を選択するのは良い方法ではありません。

関連する問題