伪造组合和具有继承的通用接口

时间:2013-10-16 23:06:47

标签: c# xml inheritance

我们正在使用XML,并希望在主XML类及其所有组件之间建立一个通用接口。但是,XML类的子组件需要其他方法,但它们也需要主组件的方法。似乎很好地用于继承。

以下是我为完成此任务而编写的一些代码。希望您可以根据使用情况了解我们的目标:

using System;

namespace SampleNamespace
{
    public class SampleClass
    {
        public static void Main()
        {

            var xmlDocumentFiles = new XmlDocumentFiles();

            xmlDocumentFiles.Files.RootFile.SetFileName("Example.xml");

            System.Console.WriteLine(
                xmlDocumentFiles.Files.RootFile.GetFileName()
            );

        }
    }

    public class XmlDocumentFilesRoot
    {
        protected string _rootFileName;

        public FilesClass Files { get { return (FilesClass) this; } }
    }

    public class FilesClass : XmlDocumentFilesRoot
    {
        public RootFileClass RootFile { get { return (RootFileClass) this; } }
    }

    public class RootFileClass : FilesClass
    {
        public void SetFileName( string newTitle )
        {
            _rootFileName = newTitle;
        }

        public string GetFileName()
        {
            return _rootFileName;
        }
    }

    public class XmlDocumentFiles : RootFileClass
    {
    }

}

我能够投入到儿童班,令我惊讶的是它运行得很好。假设除了在父类中没有意义的方法之外没有任何东西放在子类中,那么这个类结构是否会出现任何问题(奇怪的编译错误,运行时崩溃)?

还有其他选择吗?我最初尝试过位于主类之外的嵌套类+扩展方法,但是需要很多代码来设置它。请参阅:https://stackoverflow.com/questions/19415717/using-c-sharp-extension-methods-on-not-in-nested-classes-to-establish-a-common

1 个答案:

答案 0 :(得分:1)

扩展类的功能,听起来像装饰器模式。

这是关于这个主题的头号优先pdf: http://oreilly.com/catalog/hfdesignpat/chapter/ch03.pdf

也;我想劝阻三重奏'。' :

xmlDocumentFiles.Files.RootFile.SetFileName("Example.xml");

2是邪恶的,如果你需要3:你肯定会失去可维护性。

希望它有所帮助。