由于这是我的第一篇 StackOverflow 帖子,我想简短地向管理该网站的人以及积极为他人提供帮助的人表示衷心的感谢。StackOverflow 一直是解决 C# 代码挑战的非常有用的资源。
类描述:在 MS VisualStudio 2010 C# .NET 控制台应用程序中,我具有以下基本/派生层次结构:
Entry
->DirEntry
Entry
->FileEntry
->AudioFileEntry
->OutputFileEntry
...后三个分别是以下基本/派生层次结构中的成员:
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
也有DirEntry[] dir_entries;
没有问题的成员 public,但请注意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
有一种方法可以在不求助于新类型的情况下实现这一点。
建议?
-涡轮