c# – .NET中的多继承的一些好的替代方法是什么?

我遇到一个问题,我的类层次结构,在WPF应用程序。这是其中一个问题,其中有两个继承树合并在一起,你不能找到任何逻辑方式,使您的继承工作顺利,没有多重继承。我想知道,如果有人有任何明智的想法,让这种系统工作,而不使它不可能跟踪或调试。

我是一个低级工程师,所以我的第一个想法总是,“哦,我会只写一些这些课程在本地C,并引用他们外部!然后我可以拥有我所有的老学校OO乐趣!唉,当你需要从管理控制继承时,这没有帮助…

允许我显示我当前投影类图的一个代码段:

 ____________________________________      _____________________________________
| CustomizableObject                 |    | System.Windows.Controls.UserControl |
|____________________________________|    |_____________________________________|
|   string XAMLHeader()              |                        ▲
|   string XAMLFooter()              |◄--┐                    |
|   CustomizableObject LoadObject()  |   \                    |
|   <Possible other implementations> |    \                   |
|____________________________________|     \                  |
         ▲                      ▲           \                 |
         |                      |            \                |
         |                      |             \               |
 _________________    ______________________   \    _____________________
| SpriteAnimation |  | SpriteAnimationFrame |  └---| CustomizableControl |
|_________________|  |______________________|      |_____________________|
                                                      ▲             ▲
                                                      |             |
                                                      |             |
                                                  ________    _____________
                                                 | Sprite |  | SpriteFrame |
                                                 |________|  |_____________|

问题很清楚:CustomizableObject和CustomizableControl对象树的分离,以及将UserControl插入到一个树中,而不是两个树中。

将CustomizableObject的实现移动到其派生类中没有实际意义,因为实现不随类而变化。此外,它会真的令人困惑,它有多次实施。所以我真的不想让CustomizableObject一个接口。接口解决方案对我没有任何意义。 (接口从来没有真正对我有意义,老实说…)

所以我再说一次,任何人有任何明亮的想法?这是一个真正的泡菜。我想了解更多关于使接口工作与我的对象树,而不是反对它。我把这个简单的sprite引擎使用WPF和C#作为一个坚实的锻炼,超过任何东西。这是很容易解决在C – 但我需要找出如何解决这些问题在一个托管的环境,而不是把我的手在空气中运行回到Win32每当遇到困难。

一种方法是使用扩展方法与接口来提供您的“派生类”实现,很像System.Linq.Queryable:

interface ICustomizableObject
{
    string SomeProperty { get; }
}

public static class CustomizableObject
{
    public static string GetXamlHeader(this ICustomizableObject obj)
    {
        return DoSomethingWith(obj.SomeProperty);
    }

    // etc
}

public class CustomizableControl : System.Windows.Controls.UserControl, ICustomizableObject
{
    public string SomeProperty { get { return "Whatever"; } }
}

用法:只要你有一个using指令用于定义扩展方法的命名空间(或与命名空间相同):

var cc = new CustomizableControl();
var header = cc.GetXamlHeader();
http://stackoverflow.com/questions/1289712/what-are-some-good-alternatives-to-multiple-inheritance-in-net

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – .NET中的多继承的一些好的替代方法是什么?