2

我们正在使用 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

4

1 回答 1

0

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

这是关于这个主题的首要pdf:http: //oreilly.com/catalog/hfdesignpat/chapter/ch03.pdf

还; 我想劝阻三重“。” :

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

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

希望能帮助到你。

于 2013-10-16T23:21:02.387 回答