シールされたキーワードの存在は、他のクラスがそれを継承できるかどうかはクラス作成者の決定であることを示しているので、なぜクラスはデフォルトでシールされておらず、明示的に拡張可能であるとマークするキーワードを使用していないのでしょうか?
多少異なることは知っていますが、アクセス修飾子はこのように機能します。デフォルトは制限的で、より完全なアクセスはキーワードの挿入によってのみ許可されます。
よく考えていない可能性が高いですが、人道的にお願いします!
シールされたキーワードの存在は、他のクラスがそれを継承できるかどうかはクラス作成者の決定であることを示しているので、なぜクラスはデフォルトでシールされておらず、明示的に拡張可能であるとマークするキーワードを使用していないのでしょうか?
多少異なることは知っていますが、アクセス修飾子はこのように機能します。デフォルトは制限的で、より完全なアクセスはキーワードの挿入によってのみ許可されます。
よく考えていない可能性が高いですが、人道的にお願いします!
ただの間違いだったと言えます。クラスは実際にデフォルトで封印されるべきだと信じている多くの人々 (私を含む) を知っています。そのキャンプの C# 設計チームには少なくとも数人がいます。C# が最初に設計されて以来、振り子は継承からやや離れています。(もちろん、その場所はありますが、私は比較的めったに使用していません。)
価値があるのは、それが Java に近すぎるという行に沿った唯一の間違いではありません。個人的には、Equals と GetHashCode がオブジェクトに含まれていないこと、およびロックのために特定の Monitor インスタンスが必要であることです...
私の意見では、デフォルトの構文はないはずです。そうすれば、常に必要なものを明示的に記述できます。これにより、コーダーはより多くのことを理解したり考えたりするようになります。
クラスを継承可能にしたい場合は、次のように記述します
public extensible class MyClass
それ以外は
public sealed class MyClass
ところで、同じことがアクセス修飾子にも当てはまり、デフォルトのアクセス修飾子を許可しないと思います。
継承はOOの基本原則であるため、間違いなく、デフォルトで継承を禁止することは直感的ではありません。
デフォルトで封印することに反対するのと同じくらい多くの議論をすることができます。逆の場合は、誰かが反対の質問を投稿することになります。
デフォルトでクラスを封印しないという決定の論理的根拠を聞いたことを思い出せません。ただし、C#がデフォルトで封印されていると指定されているはずだと信じている人は確かにかなりいます。
http://codebetter.com/blogs/patricksmacchia/archive/2008/01/05/rambling-on-the-sealed-keyword.aspx
封印されたクラスは継承を妨げるため、オブジェクト指向の忌まわしさです。詳細については、この暴言を参照してください;-)
封印されていないクラスから派生しただけでは、クラスの動作は変わりません。発生する可能性のある最悪の事態は、基本クラスの新しいバージョンが、派生クラス(この場合、新しい修飾子またはオーバーライド修飾子を使用する必要があることを示すコンパイラ警告が表示される)またはベースと同じ名前のメンバーを追加することです。クラスは封印されています(クラスがすでに公開されている場合、これは設計ではありません)。任意のサブレーザー処理は、依然としてリスコフの置換原則に準拠しています。
C#でメンバーがデフォルトでオーバーライドできない理由は、メソッドをオーバーライドすると、基本クラスの作成者が予期していなかった方法で基本クラスの動作が変更される可能性があるためです。それを明示的に抽象的または仮想的にすることにより、作者はそれが変更される可能性があること、または他の方法で自分の制御が及ばないことを認識しており、作者はこれを考慮に入れるべきだったと言っています。
Word の機能の 80% が使用されなくなります。クラスの 80% は継承されません。どちらの場合も、ときどき誰かがやって来て、機能を使用または再利用したいと考えます。元の設計者が再利用を禁止する必要があるのはなぜですか? 何を再利用するかは、再利用者に決定してもらいます。
オブジェクトがデフォルトでプライベートでないのと同じ理由で
また
デフォルトではオブジェクトはプライベートではない、オブジェクトのアナログと一致する
結局のところ、それは言語の設計上の決定であり、作成者が言うことはカノンの素材です。