如果C ++ .NET允许多重继承,我会在类中使用我的常用方法并从中派生出来。
我有从Panel,Label,TabControl派生的类......它们具有完全相同的方法。
如何构建我的C ++代码,以便我只编写一次常用方法?
以下是我想要添加到每个派生类的属性的简单示例。扩展方法听起来很理想,但在C ++中并不存在。
private: int panelBottomMargin;
public:
[Browsable(true)]
[CategoryAttribute("Layout"), DescriptionAttribute(
"Specify the gap between the last control and the bottom of the panel"),
DefaultValueAttribute(panelBottomMarginDefault)]
[DesignerSerializationVisibility(DesignerSerializationVisibility::Visible)]
property int PanelBottomMargin
{
int get() { return this->panelBottomMargin; }
void set(int margin) { this->panelBottomMargin = margin; }
}
答案 0 :(得分:3)
我无法确定这里的“常用方法”是什么意思,但一般来说,命名空间级非成员函数是最好的方法(参见标准库中的几乎所有算法)。
如果它实际上需要访问您的类的私有属性,那么它可能不是一个常用的方法,应该在继承级别实现,它所运行的属性存在。
几乎可以肯定的是滥用继承将常用方法放入您继承的类中:使用继承来扩展,而不是重用。
答案 1 :(得分:0)
将您的常用方法放在Utility类中,在需要时创建此类的实例(将对象传递给构造函数)。
答案 2 :(得分:0)
静态方法有什么问题?或者实例化一个可以对给定类型的对象进行操作的新类?最好不要以明显不遵循“is-a”原则的方式滥用继承 - 尽可能使用“has-a”。
通常,如果MI被视为您的问题的解决方案而不涉及“mixin”类型语义,那么您应该考虑一个新的解决方案。
答案 3 :(得分:0)
如果您不需要访问对象的私有/受保护字段,则可以使用.NET“extension methods”。