c# - 在 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)
{
}
}
解决方案
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) { ... }
}
推荐阅读
- ffmpeg - 有没有办法使用 Ffmpeg 从.webm 中剪切前 1 秒的视频而没有关键帧?
- javascript - 自定义滚动条,像引力透镜一样围绕拇指灵活扩展轨道
- tensorflow - 无法使用 DenseFeature 输入层构建模型,得到“'DenseFeatures' 对象没有属性 'shape'”
- c - 在 C 中动态分配具有 10 亿个元素的整数数组
- kubernetes - 如何在 Kubernetes 中包含多个文件和文件夹的 pod 文件夹中挂载特定文件
- prometheus - Prometheus Alertmanger 使用 curl 删除所有静音。REST API
- java - 将集合转换为 csv 元素的列表 Java 8
- typescript - 键入一个变量作为地图中的任何键?
- android - Android 远程推送通知 - 在重复模式下设置声音
- ffmpeg - HLS 不连续性卡在缓冲区中