2015-11-24 32 views
0

所以我剛加入這個論壇,因爲我找不到我簡單問題的答案。德爾福 - 可以從屬性讀取屬性?

我想聲明一個只讀屬性,它應該讀取一個私有成員只讀屬性。這似乎是行不通的。我能圍繞這個封鎖工作嗎?

這裏是代碼片段:

property Mine: TMineType read mMine.MineType; 

編輯:也許我應該澄清。 mMine屬於類別TMine,它具有屬性MineType。 MineType是TMineType類型並且是隻讀的。

+0

當你說私人會員屬性時,你是指在同一個類中聲明的屬性還是在父類中聲明的屬性? – SilverWarior

+0

@SilverWarrior我引用的是在同一個類中聲明的屬性。但是現在我已經知道,如果沒有手寫吸氣劑,我試圖做的事情是不可能的。 –

+0

如果該屬性是在同一類中聲明的,爲什麼不簡單地改變從私有到公共的可見性。另外請記住,您可以有多個屬性訪問相同的字段。因此,您可以擁有一個私有財產,該財產既可以讀取也可以寫入該字段,然後是隻能從該字段讀取的公共財產。 – SilverWarior

回答

0

根據您在您的評論中提供的其他信息(這些信息應該從一開始就被放入原始問題本身)我相信我可以提供一個答案,希望能夠爲您遇到的問題提供解決方案。

在下面的代碼中,我展示瞭如何通過使用屬性轉發或屬性發布來通過子類訪問父類屬性。

注意上述方法只從子類訪問父類的屬性或字段時,但不能用於訪問字段或其他類的屬性工作。

原因是該屬性可能只能直接訪問其自己的類或任何父類的字段。

此屬性只能使用在其自己的類或任何父類中聲明的getter和setter方法。

我希望我的這個答案可以給你更好的關於使用屬性的想法。

現在,我猜這些屬性可能會讓你感到有點困惑,但相信我,當你學會與他們合作時,你會意識到他們實際上有多強大。我必須承認,我現在仍然在尋找新的方式將它們用於我的項目中。

+0

我以爲我有我原來的問題所需的所有信息,我想不是這樣。對不起,我是新來的。 你的答案是無用的。就像你猜測的那樣,我仍然在與delphi學習進度的開始,我很高興我決定與物業合作。現在,我相信我對它們的工作方式有了更多的瞭解,我將會嘗試給這個屬性一個提示。 非常感謝您的時間。 –

1

甲屬性getter可以是兩件事情之一:

  • 字段,或
  • 的函數。

您的代碼嘗試使用屬性實現getter,但不符合上述要求。

的文檔中包含的所有細節:http://docwiki.embarcadero.com/RADStudio/en/Properties

+0

好吧,明白了!感謝您的快速回答! –

+0

如果編譯器足夠聰明,可以自動爲這樣一個吸氣器生成代碼,它會有多棒。 –

+1

可能不是很好,@斯特凡。你多久需要一次這樣的事情?很少,我懷疑。 –

1

在實踐層面上,你可以做這樣的事情:

function GetMineType : TMineType; 
begin 
    result := mMine.MineType; 
end; 

property Mine: TMineType read GetMineType; 

如果聲明GetMineType功能內嵌它不會產生任何代碼。

+0

看起來很簡單,我想不起來。這真的很有幫助。 –