いいえ。C# はこの考え方をサポートしていません (「戻り型の共分散」と呼ばれます)。ただし、これを行うことができます:
public class FatherProp
{
}
public class ChildProp: FatherProp
{
}
public class Father
{
public virtual FatherProp SomePropertyName
{
get
{
return new FatherProp();
}
}
}
public class Child : Father
{
public override FatherProp SomePropertyName
{
get
{
// override to return a derived type instead
return new ChildProp();
}
}
}
つまり、基本クラスで定義されたコントラクトを使用しますが、派生型を返します。この点を明確にするために、より詳細なサンプルを作成しました。もう一度「this」を返しても、何も変わりません。
返されたオブジェクトの実際の型をテストすることは可能ですが (面倒です) (つまり、「someObject が ChildProp の場合」)、その型に対して正しいことを行う仮想メソッドを呼び出す方が適切です。
基本クラスの仮想メソッド (この場合は仮想プロパティ) は実装を持つだけでなく、コントラクトも定義します。このコントラクトを満たす場合、子クラスは SomePropertyName の別の実装を提供できます (つまり、 SomePropertyName は型 " のオブジェクトを返します)。ファーザープロップ」)。「FatherProp」から派生したタイプ「ChildProp」のオブジェクトを返すことは、この契約を満たしています。ただし、「子」のコントラクトを変更することはできません。このコントラクトは、「父」の子孫のすべてのクラスに適用されます。
一歩下がって、より広範な設計を検討すると、C# ツールキットには、ジェネリックまたはインターフェイスなど、代わりに考えた方がよい言語構造が他にもあります。