在C#
中實現專業頁麵類型返回在.NET框架中開發自定義頁麵類型通常會在從控件訪問這些頁面時面臨挑戰。 標準返回類型通常默認為特定的頁麵類型。本文探討瞭如何克服此限制並返回您的專業頁麵類型。
>返回類型的協方差及其含義
> 從本質上講,返回類型協方差啟用了基礎類方法,該方法返回使用方法返回更具體的子類型的通用類型。這提高了類型的安全性並提供了更大的靈活性。
>考慮一個基類Enclosure
及其派生的類Aquarium
:
<code class="language-csharp">abstract class Enclosure { public abstract Animal Contents(); } class Aquarium : Enclosure { public override Fish Contents() { ... } }</code>
在這裡,Aquarium
>'s Contents()
方法返回Fish
,比基類的Animal
更具體的類型。 這使消費者可以在受益於Animal
>的精確度的同時安全地施放Aquarium
>。
c#的限制和實用解決方案> 由於CLR限制,
c#固有地支持返回類型協方差。 但是,解決方法有效地模擬了這種行為:
<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>該策略在基類中使用了一個受保護的抽象
方法。派生的類覆蓋它,返回專業類型(GetContents()
),同時還可以用專用返回類型來暴露新的Fish
方法。 這種方法在編譯時保持強勁的打字。 關鍵是使用Contents()
隱藏基類方法,從而允許使用更具體的返回類型。 這提供了協方差的好處,而無需依靠直接語言支持。 new
>
以上是可以針對專業頁麵類型實現C#返回類型協方差嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!