我正在構建一個簡單的德語學習幫助程序,其中一個元素是字典。爲了管理所有單詞,我添加了三個類: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。) –