8

必要なメソッドを持つクラスがある場合protectedinternal。アセンブリ内の派生クラスのみがそれを呼び出すことができるようにしたいと思います。

protected internalを意味するprotected のでinternalあなたは選択をしなければなりません。この場合、何を選択しますか?protectedまたはinternal

4

5 に答える 5

6

個人的には保護を選択します。独自のアセンブリのサブクラスがメソッドを呼び出すのに十分である場合、なぜ別のアセンブリのサブクラスを使用しないのでしょうか。おそらく、機能を完全に別の(内部)クラスにリファクタリングすることができます。

あなたは本当に方法の目的について客観的に考える必要があります。ほとんどの場合、内部のアクセシビリティは私にとって間違っていると感じます。主に、誰かがクラスまたはメソッドを内部としてマークすることを決定したために、レンガの壁にぶつかった.NETFrameworkのコントロールまたはクラスから派生しようとした私の経験が原因です。元の作成者は、そのメソッドにアクセスできないためにサブクラスの実装がはるかに困難になることに気づきませんでした。

編集

明確にするために、クラスの内部アクセシビリティは非常に便利であり、私は一般的に内部が悪いことを意味していませんでした。私のポイントは、そうでなければパブリッククラスの内部メソッドは私には間違っているように見えるということでした。適切に設計された基本クラスは、同じアセンブリ内の派生クラスに不当な利点を与えるべきではありません。

于 2010-05-20T05:07:31.867 に答える
5

アセンブリ内の派生クラスのみがそれを呼び出すことができるようにしたいと思います。

それでは、2つの選択肢があります。あなたはそれを保護することができます、そしてあなたの顧客の一人があなたのクラスを拡張してあなたのメソッドを呼び出し、あなたがそれを知ったときはいつでも、あなたは彼らにそれをやめてくださいと彼らに告げる厳しい言葉の手紙を書くことができます。または、内部で作成し、同僚のコードのコードレビューを行って、同僚が使用するはずのない方法を使用していないことを確認することもできます。

私の推測では、後者の方が安くて簡単です。私はそれを内部にします。

于 2010-05-20T07:17:08.390 に答える
3

私は正しい選択はだと信じていますinternal。このようにして、アセンブリの外部の人がこのメソッドを呼び出さないように保護できます。これにより、注意が必要になり、派生クラスからのみこのメソッドを呼び出すことができます。他の人がそれを使用するときに注意することを望むよりも、あなたが書くアセンブリで注意する方が簡単です。

于 2010-05-20T04:53:56.677 に答える
1

protected internal意地悪なprotectedORを作るのはとても風変わりな決断internalです。この正確なケースでは、を使用しますinternal。その理由は、カプセル化が破られた場合、私はむしろ私であり、誰かが私の管理下にないことを望んでいるからです。

于 2010-05-20T05:25:54.903 に答える
0

答えはあなたのニーズによって異なると思います。もし私があなたなら、私はこのようなことをするでしょう:

    public class YourClass
    {
       protected class InnerClass
       {
           internal void YourMethod()
           {
               // Your Code
           }
       }
    }
于 2010-05-20T05:53:16.710 に答える