この質問にはすでに答えがあります。
私は2つのクラスがあります
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public new void GetName()
{
Console.Write(new string(Name.Reverse().ToArray()));
}
}
新しいオブジェクトを作成しますB
私は電話したいGetName
からA
そしてGetName
からB
B foo = new B("foo");
foo.GetName(); // output "oof"
期待される出力"foooof"
私はすでに試したpublic new void GetName() : base
しかし、それはコンパイルされません
あなたの希望する出力を得るために、あなたは呼び出す必要がありますbase GetName()
メソッドGetName()
の方法Class B
。例えばこんな感じです:
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public new void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
これは出ますfoooof
オーバーライドを使用して、オーバーライドされたメソッドから基本クラスのメソッドを呼び出します。
public class A
{
public virtual void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public override void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
のvirtual
キーワードを使用してメソッドを変更し、派生クラスでそのメソッドをオーバーライドできるようにします。new
修飾子は基本クラスのメソッドを隠します。を呼び出すことによってbase.GetName();
基本メソッドBTWを実行しているので、これを使用しても違いはありません。new
またはoverride
ここでのキーワードoverride
。
参考文献:
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public virtual void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public override void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
選択に応じて上書きまたは新規を使用してください。 これらのシナリオを扱うのが好きです。
A foo = new B("foo");
foo.GetName();
または
A foo = new A("foo");
foo.GetName();
または
B foo = new B("foo");
foo.GetName();
このmsdnリンクあなたにはっきりした絵を与えます。
base.GetName();
なしで動作するようですoverride
も - ToshiGetName
上記のコードに記載されているような結果です。 - S.Akbaribase.GetName();
あなたが基本的な方法BTWを実行しているのはこれがあなたが使うのに違いがない理由ですnew
またはoverride
ここに。しかし、あなたはそれを知っておくべきですnew
基本メソッドを隠しましたが、オーバーライドを使用してそれを拡張しました。 - S.Akbarinew
危険です。自分のしていることがわからない場合は、使用しないでください。 - Patrick Hofman