これは私の最初のStackOverflow投稿なので、サイトを管理している人たちと積極的に他の人を支援してくれている人たちに心からの感謝を述べたいと思います。StackOverflowは、C#コードの課題を解決するのに非常に役立つリソースです。
クラスの説明:MS VisualStudio 2010 C#.NETコンソールアプリには、次の基本/派生階層があります。
Entry
->DirEntry
Entry
->FileEntry
->AudioFileEntry
->OutputFileEntry
...後者の3つは、それぞれ次の基本/派生階層のメンバーです。
Directory
->AudioDirectory
->OutputDirectory
...そのような:
Directory
メンバーがいますpublic FileEntry[] file_entries;
AudioDirectory
メンバーがいますpublic AudioFileEntry[] file_entries;
OutputDirectory
メンバーがいますpublic OutputFileEntry[] file_entries;
基本クラスEntry
は次の方法で宣言されます。
public class Entry : IComparable
{
public string name;
public int entryID;
public int parentID;
//(other code omitted)
}
Directory
また、問題のないメンバーpublicもありますが、それよりも深くオーバーライドされないDirEntry[] dir_entries;
ことに注意してください(たとえば、ありません)。DirEntry
Directory
AudioDirEntry
問題: 型がまたはの場合に、基本クラスのメソッド内または他のクラスから共通メンバーNullReferenceException
を読み取ろうとしています。file_entries[n]
Directory
AudioDirectory
OutputDirectory
関連するクラス、メンバー、またはメソッドは静的ではありません。私は使ってみましnew
たoverride
が、役に立ちませんでした。プロパティを作成しようとしてfile_entries
います:
public class Directory
{
public virtual FileEntry[] file_entries { get; set; }
}
public class AudioDirectory : Directory
{
public override AudioFileEntry[] file_entries { get; set; }
//(other code omitted)
}
...エラー「... 'app1.AudioDirectory.file_entries': type must be 'app1.FileEntry[]' to match overridden member 'app1.Directory.file_entries'
」で失敗します
目標:オブジェクトがどの派生型であるかに関係なく、file_entries
基本クラスのメソッドで参照する機能。上記は本質的にポリモーフィズムのすべてであり、新しいタイプに頼ることなくこれを達成する方法があるはずDirectory
なので、私の腸はおそらく単純なものを見落としていると私に言います。dynamic
提案?
-タービン