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中文网其他相关文章!