如何构建我的C++;代码,以便我只编写一次常用方法? 如果C++允许.NET继承多重继承,我将在类中拥有我的常用方法,并从中派生。< /P>
我有从Panel、Label、TabControl派生的类。。。它们有完全相同的方法 <>我怎样构造我的C++代码,以便我只写我的常用方法一次?< /p> 下面是我想添加到每个派生类的属性的简单示例。扩展方法听起来很理想,但是C++中不存在。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
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根本没有什么本质上的错误。你想的是