如何构建我的C ++代码,以便我只编写一次常用方法?

时间:2011-03-23 23:17:19

标签: c++ winforms class inheritance managed

如果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; }
    }

4 个答案:

答案 0 :(得分:3)

我无法确定这里的“常用方法”是什么意思,但一般来说,命名空间级非成员函数是最好的方法(参见标准库中的几乎所有算法)。

如果它实际上需要访问您的类的私有属性,那么它可能不是一个常用的方法,应该在继承级别实现,它所运行的属性存在。

几乎可以肯定的是滥用继承将常用方法放入您继承的类中:使用继承来扩展,而不是重用。

答案 1 :(得分:0)

将您的常用方法放在Utility类中,在需要时创建此类的实例(将对象传递给构造函数)。

答案 2 :(得分:0)

静态方法有什么问题?或者实例化一个可以对给定类型的对象进行操作的新类?最好不要以明显不遵循“is-a”原则的方式滥用继承 - 尽可能使用“has-a”。

通常,如果MI被视为您的问题的解决方案而不涉及“mixin”类型语义,那么您应该考虑一个新的解决方案。

答案 3 :(得分:0)

如果您不需要访问对象的私有/受保护字段,则可以使用.NET“extension methods”。