gpt4 book ai didi

C#:简单的多重继承/mixin 替换?

转载 作者:太空狗 更新时间:2023-10-30 00:50:14 25 4
gpt4 key购买 nike

我有一个来自外部库的类,我需要将其扩展到另一个类中。此外,扩展应该保持可重用性,因为我也需要在其他地方实现它们。

由于 C# 中既不支持混合也不支持多重继承,解决这个问题的常用方法是什么?

namespace ExtLib
{
public class Properties
{
public virtual int fieldN { get; set; }
}
}

namespace MyLib
{
public class Extensions
{
public virtual int fieldM { get; set; }
}
}

namespace MyProject
{
public class MyModel
{
// needs to have all fields from ExtLib.Properties AND MyLib.Extensions
}

public class MyOtherModel
{
// needs to have all fields from MyLib.Extensions,
// MyLib.Extensions should be reusable
}
}

我知道一个解决方案可能是接口(interface) IExtensions,但是这会导致大量重复,因为 ExtensionsProperties 的字段数量> 相当高(并且在开发阶段它们变化很大)。


有什么最佳实践吗?

最佳答案

如何将这些类的实例聚合到 MyModel 中?

public class MyModel
{
private Properties _properties;
private Extensions _ extensions;

public MyModel(Properties properties, Extensions extensions)
{
_properties = properties;
_extensions = extensions;
}

public Properties Prop
{
get { return _properties; }
}

public Extensions Ext
{
get { return _extensions; }
}
}

或者,您当然可以摆脱手动支持字段,并使用具有公共(public) getter 和私有(private) setter 的自动实现的属性。

PropertiesExtensions 的所有更改将自动反射(reflect)在 MyModel 中。聚合是一种以面向对象的方式使用设计模式的常见方式,与类方式相反,后者通常使用多重继承。

至于多态性问题,您可以创建一个派生类,覆盖您想要的任何行为并将该类的一个实例传递给构造函数。

关于C#:简单的多重继承/mixin 替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32977827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com