[解決済み】新規作成とオーバーライドの違いについて
2022-04-01 13:58:10
質問
以下の違いは何でしょうか?
ケース1:ベースクラス
public void DoIt();
ケース 1: 継承されたクラス
public new void DoIt();
ケース2:ベースクラス
public virtual void DoIt();
ケース 2: 継承されたクラス
public override void DoIt();
私が行ったテストによると、ケース1もケース2も同じ効果があるように見えます。違いや、望ましい方法はありますか?
解決方法は?
<ブロッククオートoverride修飾子は 仮想メソッドに使用され 抽象的なメソッド。これは コンパイラは最後に定義された を実装しています。たとえ への参照で呼び出された場合、そのメソッドは ベースクラスが使用されます。 をオーバーライドした実装を使用します。
public class Base
{
public virtual void DoIt()
{
}
}
public class Derived : Base
{
public override void DoIt()
{
}
}
Base b = new Derived();
b.DoIt(); // Calls Derived.DoIt
を呼び出します。
Derived.DoIt
をオーバーライドする場合は
Base.DoIt
.
新しいモディファイアは コンパイラは、子クラスの実装を使用するように の代わりに親クラスの の実装があります。でないコードは 自分のクラスではなく、親クラスを参照する クラスは親クラスを使用します。 の実装を使用します。
public class Base
{
public virtual void DoIt()
{
}
}
public class Derived : Base
{
public new void DoIt()
{
}
}
Base b = new Derived();
Derived d = new Derived();
b.DoIt(); // Calls Base.DoIt
d.DoIt(); // Calls Derived.DoIt
最初に呼び出すのは
Base.DoIt
次に
Derived.DoIt
. これらは、派生メソッドがベースメソッドをオーバーライドするのではなく、事実上、同じ名前を持つ2つの全く別のメソッドです。
出典 マイクロソフトブログ
関連
-
[解決済み] 投げる」と「投げる元」は違うのですか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaScriptの「new」キーワードとは何ですか?
-
[解決済み] EqualsメソッドがオーバーライドされたときにGetHashCodeをオーバーライドすることが重要な理由は何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] 関数を終了するには?
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する