この質問にはすでに答えがあります。
私は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