私たちは 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