c#return type covariance:制限とソリューション
.NET Webサイト開発には、カスタマイズされたページタイプが必要です。 コントロールからこれらのページにアクセスするには、デフォルトのページタイプがカスタムのページタイプでオーバーライドされていない限り問題があります。 ただし、C#はリターンタイプの共分散を直接サポートしていないため、より専門的なタイプを返すために基本クラスのメソッドの単純なオーバーライドを妨げます。 この制限には回避策が必要です
課題:派生タイプを返すための基本クラスのメソッドを直接オーバーライドするC#。
回避策戦略:
ソリューションには、抽象的なベースクラスの方法と、同様の効果を達成するためにAモディファイアを活用するコンクリート派生クラスメソッドを使用することが含まれます。 このアプローチは、コンパイルタイムタイプを扱うときに、より強いタイピングを維持します。
new
このパターンでは、派生クラス(
)の<code class="language-csharp">abstract class Enclosure { protected abstract Animal GetContents(); public Animal Contents() { return this.GetContents(); } } class Aquarium : Enclosure { protected override Animal GetContents() { return this.Contents(); } public new Fish Contents() { /* ... implementation to return a Fish object ... */ } }</code>
)を提供しながら、仮想GetContents()
メソッドをオーバーライドすることができます。 Fish
キーワードは、派生クラスが基本クラスのメソッドを無効にするのではなく、新しいメソッドを作成していることを明示的に示しています。 これにより、C#のタイプシステムの制約を順守しながら、望ましい動作を効果的に実現します。
以上がC#はリターンタイプの共分散を達成できますか?そうでない場合、どのような回避策が存在しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。