繁体   English   中英

在 C# 中,如何向已构建的 class 添加功能?

[英]In C#, how do I add functionality to an already constructed class?

假设我已经有一只鸭子。 鉴于 Duck 是只读的并且 C# 是 GC'd,有没有办法将鸭子放入带有 inheritance 的绿头鸭中而不会碰到复制构造函数?

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

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

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

在某些情况下,您可以使用 go 组合超过 inheritance (尽管我不认为它在此示例中模拟您的域)。

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) { ... }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM