如何构建我的C++;代码,以便我只编写一次常用方法? 如果C++允许.NET继承多重继承,我将在类中拥有我的常用方法,并从中派生。< /P>

如何构建我的C++;代码,以便我只编写一次常用方法? 如果C++允许.NET继承多重继承,我将在类中拥有我的常用方法,并从中派生。< /P>,c++,winforms,class,inheritance,managed,C++,Winforms,Class,Inheritance,Managed,我有从Panel、Label、TabControl派生的类。。。它们有完全相同的方法 我怎样构造我的C++代码,以便我只写我的常用方法一次?< /p> 下面是我想添加到每个派生类的属性的简单示例。扩展方法听起来很理想,但是C++中不存在。p> private: int panelBottomMargin; public: [Browsable(true)] [CategoryAttribute("Layout"), DescriptionAttribute( "S

我有从Panel、Label、TabControl派生的类。。。它们有完全相同的方法

<>我怎样构造我的C++代码,以便我只写我的常用方法一次?< /p> 下面是我想添加到每个派生类的属性的简单示例。扩展方法听起来很理想,但是C++中不存在。p>
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; }
    }

将常用方法放在实用程序类中,必要时创建该类的实例(将对象传递给构造函数)。

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


一般来说,如果MI被认为是一个不涉及“混合”类型语义的问题的解决方案,那么你应该考虑一个新的解决方案。

< p>你可以使用.NET“”如果你不需要访问一个对象的私有/保护字段。但一般来说,命名空间级别的非成员函数是实现这一点的最佳方法(请参阅标准库中的几乎所有算法)

如果它确实需要访问类的私有属性,那么它可能不是一个通用方法,应该在其操作的属性存在的继承级别上实现


几乎可以肯定的是滥用继承性将普通方法放入一个类中,然后继承它:使用继承来扩展,而不是重用。< /P>创建控件类的扩展方法。@ StMMNETE您的评论听起来很有前途,您能指给我一些更具体的东西吗?对不起,没有看到编程语言是C++。但是,如果你想知道更多关于C扩展方法的话,我可以说,C++不支持扩展方法。嗯,Mixin现在还不被.NET支持,对吧?虽然我支持“HAS-A”比“IS-A”好,但MI根本没有什么本质上的错误。你想的是虚拟> /Cord>继承C++,这是不同的。我需要在每个派生类中有相同或非常相似的代码。我不想重复任何可能的情况。据我所知,C++不支持扩展方法。@ BBBIKSKAfAK不能在C++中声明/实现扩展方法。但你可以称之为现有的。这样,您就可以用C#编写一次扩展,并在两种语言中使用它们。顺便说一句,VB.net也应该可以工作。@bobinski是的,这在c++/.net中看起来不像在自然的.net语言中那么好。@bobinski好的,如果你还不懂c,也没有必要。只有在不同的项目中实际使用这两种语言,它才有回报。我当然不想滥用继承,我只想以相同的方式扩展每个派生类。我已经编辑了这个问题,添加了一个示例属性,我想将其添加到每个派生类中。对不起,这是属性和方法。我只想做一次,而不是为每个派生类做一次。我需要在每个派生类中都有相同或非常相似的代码。如果可能的话,我根本不想有任何重复。