首頁 >後端開發 >C++ >C#支持返回類型協方差,如何實現?

C#支持返回類型協方差,如何實現?

Linda Hamilton
Linda Hamilton原創
2025-01-29 15:41:09756瀏覽

Does C# Support Return Type Covariance, and How Can It Be Achieved?

C#中的返回類型協變:支持與實現

C#中的返回類型協變允許派生類返回比其基類更具體的類型。這一特性使得創建既能提供專業化行為又能保持繼承層次結構完整性的方法成為可能。

讓我們來看一個例子:

<code class="language-csharp">public abstract class Animal
{
    public abstract string GetName();
}

public class Cat : Animal
{
    public string GetMeow();
}</code>

在這個場景中,在Cat類中有一個返回字符串的方法來指定其喵叫聲將非常有用。然而,C#並不直接支持返回類型協變。

在2011年的最初答案中,C#不支持返回類型協變,並且由於公共語言運行時(CLR)的限制,未來也不太可能實現它。然而,在C#的最新版本中,這種情況已經發生了變化。請參閱鏈接文章,“https://www.php.cn/link/40f4d60542d863444e5711c7a5584832 中的協變返回”,了解C# 9.0及更高版本中如何實現返回類型協變的更多信息。

在引入返回類型協變之前,一種解決方法是引入一個中間方法來獲取派生類的返回值。

<code class="language-csharp">public abstract class Animal
{
    public abstract object GetContents();
    public Animal Contents() { return (Animal)GetContents(); }
}

public class Cat : Animal
{
    protected override object GetContents() { return this; }
    public new string Contents() { return GetMeow(); }
}</code>

此技術允許檢索Cat的特定Contents,在本例中返回一個字符串。

雖然在C# 9.0之前的版本中並不直接支持返回類型協變,但所討論的解決方法仍然可以用作實現所需行為的一種方法。但是,需要注意的是,在更高版本的C#中正式實現返回類型協變提供了一種更優雅、更簡潔的解決方案。

以上是C#支持返回類型協方差,如何實現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn