C# 伪造组合和带有继承的公共接口

C# 伪造组合和带有继承的公共接口,c#,xml,inheritance,C#,Xml,Inheritance,我们正在使用XML,希望在主XML类及其所有组件之间有一个公共接口。然而,XML类的子组件需要额外的方法,但它们也需要主组件的方法。似乎对继承很有用 下面是我为完成这项任务而编写的一些代码。希望您能根据使用情况对我们的产品有所了解: using System; namespace SampleNamespace { public class SampleClass { public static void Main() {

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

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


还有其他选择吗?我最初尝试了位于主类之外的嵌套类+扩展方法,但是需要很多代码来设置它。请参阅:

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

以下是关于这个主题的首张pdf:

还有,;我想阻止三重“.”:

xmlDocumentFiles.Files.RootFile.SetFileName("Example.xml");
2是邪恶的,如果你需要3:你肯定会失去可维护性


希望能有帮助

真的吗?你知道,我并不是完全不同意,但我们的希望是,这种模式能够提供一些分离的关注点,不让一个类中充斥着大量不同的方法。@AlexanderPritchard:这样想吧:如果你继续这种方法,你最终会使用4,5或者6个点。假设有一个对象返回“null”值,您将得到一个NullReferenceException。在某些情况下,这很难调试。情况可能会更糟:如果您将IDisposable返回到某个地方,您将在何时执行dispose。。。更糟糕的是:在某处返回一个Com对象(我实际上见过一次):什么时候调用Marshall.Resease(如果需要)?@AlexanderPritchard:要了解装饰器模式的一个非常好的示例,请查看.net流类。有很多不同的类型(MemoryStream、StreamReader、StreamWriter、Images、HttpResponse等),它们都公开自己的方法,或者实现自己的(例如写入)覆盖。它在一个类中具有各种额外的功能,而不会丢失基类功能。它也很容易与接口结合,所以你甚至不坚持一个类的具体实现:“我真的认为你应该考虑这样一个基本模式在这个案件。谢谢。我们将探讨这个想法。