c#
で特別なページタイプのリターンを達成します .NETフレームワーク内のカスタムページタイプの開発は、これらのページにコントロールからアクセスする際に課題を提示することがよくあります。 通常、標準のリターンタイプは、デフォルトではないページタイプになります。この記事では、この制限を克服し、専門のページの種類を返す方法について説明します。 タイプの共分散とその意味を返します リターンタイプの共分散は、本質的に、より具体的なサブタイプを返すメソッドを使用して一般的なタイプを返す基本クラスのメソッドをオーバーライドすることを可能にします。これにより、タイプの安全性が向上し、柔軟性が向上します。
ベースクラス
とその派生クラス:Enclosure
を考えてみましょう
Aquarium
<code class="language-csharp">abstract class Enclosure { public abstract Animal Contents(); } class Aquarium : Enclosure { public override Fish Contents() { ... } }</code>'s
メソッドは、Aquarium
を返します。ベースクラスのContents()
よりも具体的なタイプです。 これにより、消費者はFish
。
Animal
Animal
c#の制限と実用的な解決策Aquarium
c#は、CLRの制限により、本質的に返品タイプの共分散をサポートしていません。 ただし、回避策はこの動作を効果的にシミュレートします:
この戦略は、ベースクラスで保護された要約メソッドを利用しています。派生クラスはそれをオーバーライドし、特殊なタイプ(
)を返し、特殊なリターンタイプで新しい<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() { ... } }</code>メソッドを公開します。 このアプローチは、コンパイル時に強いタイピングを維持します。 重要なのは、
を使用して基本クラスのメソッドを非表示にし、より具体的な返品タイプを使用できるようにすることです。 これにより、直接的な言語サポートに依存せずに共分散の利点が提供されます。
以上がC#は、特殊なページタイプに対してタイプの共分散を達成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。