我正在构建一个简单的德语学习帮助程序,其中一个元素是字典。为了管理所有单词,我添加了三个类:Noun
,Adjective
和Verb
。它们都从另一个抽象类Word
继承。名词类还包含一个Article
枚举。 所有单词(形容词,名词和动词对象)都存储在一个List<Word>
..我无法在ListView列或更具体地打印它们 - 访问我想要的字段。C#在超类对象上操作时获取对子类变量的访问
基本上,我想遍历列表中的所有单词。在做这件事时,检查当前项目是否是名词(名词类型的对象) - 如果是,请获取其文章。如果不是,打印“ - ”,然后将单词翻译添加到列。
这里是方法:
private void UpdateList(List<Word> currentWordList) //passing the List
{
wordsListView.Items.Clear();
int index = 1; // first column of the number
foreach (Word w in currentWordList)
{
ListViewItem newItem = new ListViewItem("" + index);
if (w is Noun)
newItem.SubItems.Add(w.Article); //here is the error (no definition for "Article")
else
newItem.SubItems.Add("--");
newItem.SubItems.Add(w.GermanTranslation);
newItem.SubItems.Add(w.PolishTranslation);
wordsListView.Items.Add(newItem);
}
}
如何解决这个问题?
非常感谢您的帮助。
考虑在GUI元素上使用数据绑定。覆盖''ToString()'的类(如'Word'及其子类),你想要保存在列表中。当GUI元素实际上*是实际数据时,许多事情变得更加容易。 –
您试图违反面向对象设计的一些基本原则。超类不应该对某个特定的子类有任何依赖。如果子类可以实现哪些超类需要调用的功能,则将功能抽象化并在子类中实现它。 – David
@大卫苛刻的话。您认为OP如何试图将“对特定子类的依赖”引入超类? (依赖/知识将在此处引入GUI控制代码,imo。) –