this同様の StackOverflow question および他の記事によると、C# メソッドはデフォルトで「非仮想」です。これは、派生クラスでそれらをオーバーライドできないことを意味します。
それが本当なら、以下の例で、プロパティが「仮想」としてマークされていなくても、Base クラスから継承する Child クラスにプロパティ LastName を実装する方法を教えてください。Child.LastName プロパティは、基本クラスの同じプロパティを「非表示」(VB「シャドウ」) にしますか? もしそうなら、Child.LastName プロパティでこれを示すために "new" キーワードが使用されないのはなぜですか?
このテスト例は、メソッドと仮想がデフォルトで、LastName プロパティの場合は「オーバーライド」が暗示されていることを示唆しているように見えますが、そうではないことは確かです。
私は何が欠けていますか?
public class BaseClass
{
private string _FirstName;
public virtual string FirstName {
get { return _FirstName; }
set { _FirstName = value; }
}
private string _LastName;
public string LastName {
get { return _LastName; }
set { _LastName = value; }
}
public void Go()
{
MessageBox.Show("Going at default speed in Base Class");
}
public void Go(int speed)
{
MessageBox.Show("Going at " + speed.ToString() + " in Base Class");
}
}
public class Child : BaseClass
{
public override string FirstName {
get { return "Childs First Name"; }
set { base.FirstName = value; }
}
public string LastName {
get { return "Child's Last Name"; }
set { base.LastName = value; }
}
public void Go()
{
MessageBox.Show("Going in Child Class");
}
public void Go(int speed)
{
MessageBox.Show("Going at " + speed.ToString() + " in Child Class");
}
}