問題タブ [sealed]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - .Net のシール クラスに相当する Python のクラス
Python には、sealed クラスに似たものがありますか? Javaでは、最終クラスとしても知られていると思います。
言い換えれば、Python では、クラスをマークして継承や展開ができないようにすることはできますか? Pythonはそのような機能を持つことを考えたことがありますか? なんで?
免責事項
実際に、封印されたクラスが存在する理由を理解しようとしています。ここでの回答(および多くの、多くの、多くの、多くの、多くの、本当に多くの他の場所での) 回答は私をまったく満足させなかったので、別の角度から見ようとしています。この質問に対する理論的な回答は避けて、タイトルに注目してください。または、主張する場合は、少なくともcsharp のシールされたクラスの非常に優れた実用的な例 を1 つ挙げてください。
私はどちらの言語の専門家でもありませんが、両方について少し知っています。ちょうど昨日、csharp でコーディングしているときに、sealed クラスの存在を知りました。そして今、Pythonにそれに相当するものがあるかどうか疑問に思っています。その存在には非常に正当な理由があると私は信じていますが、私は本当にそれを理解していません.
c# - プライベート コンストラクターを持つクラスとプライベート コンストラクターを持つシール クラスの違いは何ですか?
AとBに違いはありますか?
クラス A にはプライベート コンストラクターがあります。
クラス B はシールされており、プライベート コンストラクターがあります。
c# - シールされたクラスからの不可能な継承を回避するには?
今日はWPFで作業しています。
System.Windows.Shapes.Line次のように、クラスから継承しようとしました:
Lineクラスが封印されていることに今気づきました。
私の目標は、クラスのように機能するクラスを作成することですLine(それを配置するCanvas)が、毎回ブラシを追加してコードを台無しにしたくないので、常に幅2pxの黒いブラシ/ストロークが必要だとしましょう。
私はそれを間違ってやろうとしていると感じています。
どうすればいいですか?
c# - メソッドを dll クラスに追加する
ここに私の問題があります:
いくつかの数学関数を含む dll があります。コードは次のようになります。
問題は、double 変数のみを操作し、あらゆる種類の数値 (UInt32、UInt64、Byte ...) を操作できる必要があることです。
他のクラスを作成する必要がありますか? それをジェネリッククラスにしますか?
クラスは、dll (別のクラス) 内のいくつかのメソッドによって呼び出されます
- dll のコードにアクセスできません
質問が十分に明確でない場合は申し訳ありませんが、さらに説明が必要な場合は、質問してください
どんな助けでも役に立つかもしれません
フォーラムを検索しましたが、役立つものは見つかりませんでしたが、質問が既に回答されていると思われる場合は、リンクを教えてください
本当にありがとうございます
java - クラスをjarファイルに封印することは可能ですか?
したがって、sealed 属性を true に設定することでパッケージを jar ファイルに封印できることはわかっていますが、マニフェストのクラス エントリで同じことを行うことは可能ですか?
Boot.class が存在する場合、またはパッケージのみを対象としてシールされている場合、以下のシールされた属性は機能しますか?
例:
c# - StringBuilder クラスが封印されているのはなぜですか?
イベントStringBuilderを実装するには継承する必要があるので、これは不思議です。TextChangeda および暗黙的/明示的な変換を含むラッパーをいつでも作成できますがprivate StringBuilder、これは適切な解決策とは思えません。
幸いなことに、StringBuilder に書き込みを行っているオブジェクトから継承できるので、これは私にとってはそれほど問題ではありませんが、なぜそのクラスが封印されているのかについてはまだ興味があります。
java - Javaでsealed(scala)から派生した新しいクラスを作成できるのはなぜですか?
2 つのクラス A と B を考えます。
コンパイルして実行:
ドキュメントで述べたように、「継承するテンプレートが継承されるクラスと同じソース ファイルで定義されている場合を除き、シールされたクラスは直接継承されない場合があります。」
同じファイルで定義されたサブクラスを介したパターン マッチングは、すべてのケースをカバーするのに十分であることを暗示していると思いましたが、この例からわかるように、そうではありません。
ここに質問があります:本当に封印されたクラス ( ADTsなど) を書く方法はありますか?それとも、コードの安全性を確保するために、すべてのパターン マッチでダミーの最後のケースを書く必要がありますか?
c# - 明示的に継承するつもりがない限り、すべてのクラスを封印するのがベストプラクティスですか?
クラスをシール済みとしてマークすることで得られる実際の利点がいくつかあるようです。
- 場合によってはパフォーマンス
- 他の特殊なケースでのコンパイル時の型の安全性シールされたクラスの明示的な変換が失敗する
- クラスの意図しない継承の防止
そして、不利な点は比較的少ないようです...コードを壊さずにクラスをアンシールできますが、コードを壊さずにアンシールされたクラスを後でシールすることはできません。
クラスを継承するつもりがない限り、クラスを常にシール済みとしてマークするのがベスト プラクティスですか? なぜですか、そうでないのですか?
このトピックに関するその他のコメントやガイダンスはありますか?