簡體   English   中英

派生類-擴展屬性

[英]Derived class - extending properties

我仍在學習和對抗派生類。

嘗試了一些簡單的方法(從我看到的所有示例中):

public class BaseClass
{
    public string Title {get;set;}
}

public class Channel : BaseClass
{
    public string Path { get; set; }
}


Channel myChannel = new Channel();
myChannel.Title = "hello";
myChannel.Path = "123";

但是我在myChannel.Path行上收到一條錯誤消息,說BaseClass does not contain a definition for Path and no extension....

請幫助我,我做錯了什么?

您顯示的示例很好。 我認為您的實際代碼中有:

BaseClass myChannel = new Channel();
myChannel.Title = "hello";
myChannel.Path = "123";

答案很簡單:確保您的局部變量的類型為Channel ,因為表達式類型 (通常是變量的類型)決定了成員解析的起點。

作為C#3中的簡潔替代方案:

var myChannel = new Channel { Title = "hello", Path = "123" };

您提供的代碼可以很好地編譯。 我懷疑您實際上有這樣的代碼:

BaseClass myChannel = new Channel();
myChannel.Title = "hello";
myChannel.Path = "123";

請注意,這里的myChannel的編譯時類型為BaseClass ,因此編譯器將無法找到Path屬性,因為該屬性在BaseClass不存在。 編譯器只能根據變量的編譯時類型查找成員。 (不考慮動態鍵入...)

如果您堅持實際發布的代碼,即使用Channel的編譯時類型,那么一切都很好。

編寫的代碼運行良好。 我懷疑你有

BaseClass myChannel = new Channel()

如果是這樣,則問題在於myChannel是對BaseClass的引用,並且看不到Path屬性。

如果您需要訪問路徑,可以使用

(myChannel as Channel).Path = "123";

hth,
艾倫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM