首页 > 解决方案 > 在 C# 中,如何向已构建的类添加功能?

问题描述

假设我已经有一只鸭子。鉴于 Duck 是只读的并且 C# 是 GC'd,有没有办法将鸭子放入具有继承性的野鸭中而不会遇到复制构造函数?

public class Duck
{
    public readonly int wings;
    public Duck(int w)
    {
        wings = w;
    }
}

public class Mallard : Duck
{
    public Mallard(Duck a) : base(a.wings)
    {
    }
}

标签: c#

解决方案


ADuck不是 a Mallard,并且在 C# 中没有办法使它成为一个。您将不得不以Mallard某种方式构造一个新的,无论是通过复制构造函数还是其他方法。

在某些情况下,您可以使用组合而不是继承(尽管我不认为它在此示例中为您的域建模)。

public class Mallard
{
   public readonly Duck duck;
   public Mallard(Duck d)
   {
      duck = d;
   }
}

如果您只是想为 Duck 添加新功能,但无法更改,您可以使用扩展方法。

public static class DuckExtensions
{
   public IEnumerable<Wing> CookWings(this Duck duck) { ... }
}

推荐阅读