[英]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.