必要なメソッドを持つクラスがある場合protected
、internal
。アセンブリ内の派生クラスのみがそれを呼び出すことができるようにしたいと思います。
protected internal
を意味するprotected
ので 、internal
あなたは選択をしなければなりません。この場合、何を選択しますか?protected
またはinternal
?
必要なメソッドを持つクラスがある場合protected
、internal
。アセンブリ内の派生クラスのみがそれを呼び出すことができるようにしたいと思います。
protected internal
を意味するprotected
ので 、internal
あなたは選択をしなければなりません。この場合、何を選択しますか?protected
またはinternal
?
個人的には保護を選択します。独自のアセンブリのサブクラスがメソッドを呼び出すのに十分である場合、なぜ別のアセンブリのサブクラスを使用しないのでしょうか。おそらく、機能を完全に別の(内部)クラスにリファクタリングすることができます。
あなたは本当に方法の目的について客観的に考える必要があります。ほとんどの場合、内部のアクセシビリティは私にとって間違っていると感じます。主に、誰かがクラスまたはメソッドを内部としてマークすることを決定したために、レンガの壁にぶつかった.NETFrameworkのコントロールまたはクラスから派生しようとした私の経験が原因です。元の作成者は、そのメソッドにアクセスできないためにサブクラスの実装がはるかに困難になることに気づきませんでした。
編集
明確にするために、クラスの内部アクセシビリティは非常に便利であり、私は一般的に内部が悪いことを意味していませんでした。私のポイントは、そうでなければパブリッククラスの内部メソッドは私には間違っているように見えるということでした。適切に設計された基本クラスは、同じアセンブリ内の派生クラスに不当な利点を与えるべきではありません。
アセンブリ内の派生クラスのみがそれを呼び出すことができるようにしたいと思います。
それでは、2つの選択肢があります。あなたはそれを保護することができます、そしてあなたの顧客の一人があなたのクラスを拡張してあなたのメソッドを呼び出し、あなたがそれを知ったときはいつでも、あなたは彼らにそれをやめてくださいと彼らに告げる厳しい言葉の手紙を書くことができます。または、内部で作成し、同僚のコードのコードレビューを行って、同僚が使用するはずのない方法を使用していないことを確認することもできます。
私の推測では、後者の方が安くて簡単です。私はそれを内部にします。
私は正しい選択はだと信じていますinternal
。このようにして、アセンブリの外部の人がこのメソッドを呼び出さないように保護できます。これにより、注意が必要になり、派生クラスからのみこのメソッドを呼び出すことができます。他の人がそれを使用するときに注意することを望むよりも、あなたが書くアセンブリで注意する方が簡単です。
protected internal
意地悪なprotected
ORを作るのはとても風変わりな決断internal
です。この正確なケースでは、を使用しますinternal
。その理由は、カプセル化が破られた場合、私はむしろ私であり、誰かが私の管理下にないことを望んでいるからです。
答えはあなたのニーズによって異なると思います。もし私があなたなら、私はこのようなことをするでしょう:
public class YourClass
{
protected class InnerClass
{
internal void YourMethod()
{
// Your Code
}
}
}