我们正在使用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
答案 0 :(得分:1)
扩展类的功能,听起来像装饰器模式。
这是关于这个主题的头号优先pdf: http://oreilly.com/catalog/hfdesignpat/chapter/ch03.pdf
也;我想劝阻三重奏'。' :
xmlDocumentFiles.Files.RootFile.SetFileName("Example.xml");
2是邪恶的,如果你需要3:你肯定会失去可维护性。
希望它有所帮助。