[解決済み】静的クラスの継承ができないのはなぜ?
質問
私は、実際には状態を必要としないいくつかのクラスを持っています。組織的な観点から、それらを階層化したいと思います。
でも、staticなクラスには継承を宣言できないようです。
そんな感じですね。
public static class Base
{
}
public static class Inherited : Base
{
}
は動作しません。
なぜ、言語の設計者はその可能性を閉ざしたのでしょうか?
どうすれば解決するの?
引用元 こちら :
これは、実はデザインによるものです。静的なクラスを継承する正当な理由はないように思われます。パブリックな静的メンバがあり、クラス名そのものからいつでもアクセスできるようになっているのです。 私が見た中で、静的なものを継承する理由は、数文字のタイピングを節約するためといった悪いものだけでした。
静的メンバを直接スコープに入れる仕組みを検討する理由はあるかもしれませんが(実際、Orcasの製品サイクルの後に検討する予定です)、静的クラス継承はそのための方法ではないのです。これは間違ったメカニズムであり、たまたま静的クラスに存在する静的メンバに対してのみ機能します。
(Mads Torgersen, C# Language PM)
チャンネル9の他の意見
<ブロッククオート.NETの継承は、インスタンスベースでのみ機能します。 静的メソッドは、インスタンスレベルではなく、型レベルで定義されます。そのため、静的メソッド/プロパティ/イベントでのオーバーライドはうまくいきません...
静的メソッドは、メモリ上に一度だけ保持されます。それらのために作成される仮想テーブルなどはありません。
.NETでインスタンスメソッドを呼び出すと、常に現在のインスタンスを渡します。これは.NETランタイムによって隠されていますが、実際に起こっていることなのです。 各インスタンスメソッドは、第一引数として、そのメソッドが実行されるオブジェクトへのポインタ(参照)を持っています。これは静的メソッドでは起こりません (型レベルで定義されているため)。コンパイラはどのように起動するメソッドを選択すればよいのでしょうか?
(littleguru)
そして、貴重なアイデアとして リトルグル は、この問題に対する部分的な回避策を用意しています。 シングルトン のパターンがあります。
関連
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] TypeScriptの静的クラス
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] 静的変数が悪とされるのはなぜですか?
-
[解決済み] Javaでは静的メソッドは継承されるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み] 既存の静的クラスに拡張メソッドを追加することはできますか?