我处于需要在C#中使用WPF的多重继承的情况。
我正在制作一个控制器,让我们说Control-1来自组合框控件。我为我的控件Control-1类添加了一些依赖属性和方法。我的control-1中的大多数属性和方法(实际上是属性和方法的实现)也可以在另一个名为Control-2的控件中使用,但该控件不应该从组合框控件中派生出来(与Control-的情况一样) 1)。
我想在另一个类中分离常见的依赖属性和方法,但是在另一个类中分离它需要我从组合框控件和包含属性和方法的公共类派生我的控件类(control-1)。
是否有设计可以解决我的问题。
注意:问题是关于C#使用WPF框架的依赖属性,它们需要静态成员而不仅仅是C#。
相关
How to reuse code when multiple inheritance is not an option?
How To Implement Shared Behavior Between Classes (Without Multiple Inheritance Of Course) in C#
What are some good alternatives to multiple-inheritance in .NET?
答案 0 :(得分:4)
可能适合您的一个解决方案是创建一个接口,并将您的实现放在扩展方法中。
答案 1 :(得分:2)
听起来像是在这里使用装饰器模式的好时机是一些资源:
http://andrewtroelsen.blogspot.com/2009/04/decorator-pattern-extension-methods.html
答案 2 :(得分:0)
我不能直接谈论依赖属性情况,所以我会谈谈一般性问题,如果这有用的话。
你不能在C#中做多次继承的实现。但是,您可以附加一个界面。
所以你可以定义界面:
interface IWhatever
{
...
}
然后,您可以在类中实现该接口的功能:
class M : IWhatever
{
}
而且,现在,您可以使用您希望拥有此附加功能的类:
class B : MustExtend, IWhatever
{
private M myMImpl = new M();
// implement functions, call to 'myMImpl' for implementation.
}
这称为'组合'。它在某些情况下很有用,并且通常未得到充分利用,我认为:)
答案 3 :(得分:0)
我使用了从派生类调用的存根,并将基类的类作为参数。这让我有几个一行功能。太糟糕了。
答案 4 :(得分:0)
扩展方法和接口的问题是依赖属性需要声明静态成员和公共属性,例如:
public PermissionEnum Permission
{
get { return (PermissionEnum)GetValue(PermissionProperty); }
set { SetValue(PermissionProperty, value); }
}
public static readonly DependencyProperty PermissionProperty =
DependencyProperty.Register("Permission", typeof(PermissionEnum), typeof(SecurityMenuItem), new FrameworkPropertyMetadata(PermissionEnum.DeliveryView));