2013-09-16 169 views
2

如果在代碼中,我想要執行類似下面的操作,那麼我的類定義需要看起來像什麼? (記住水果/語言的東西只是一個例子如何將「子屬性」添加到類屬性

dim myfruit as new fruit() 
myfruit.name = "apple" 
myfruit.name.spanish = "manzana" 

這裏是類我有,只是不知道如何添加「分財產」。

Public Class Fruit 
    Private _name As String 
    Public Property name() As String 
     Get 
      Return _name 
     End Get 
     Set(ByVal value As String) 
      _name = value 
     End Set 
    End Property 
End Class 
+1

你有沒有考慮過使用資源文件? – Caramiriel

+0

我不熟悉...對不起 –

+0

http://jebarson.info/post/2011/03/24/Localization-Multilingual-Support-Using-Resource-Files-In-net.aspx –

回答

4

一般情況下,你有一個「分財產」,你需要讓自己財產的類本身。這意味着子屬性實際上是頂級屬性暴露的類的屬性。

實際上,你會從一個字符串名稱屬性更改爲「翻譯」類或類似,即:

Public Class Fruit 
    Public Property Name As New Translations 
End Class 

Public Class Translations 
    Public Property Primary As String 
    public Property Spanish As String 
End Class 

然而,這可能會打破你顯示的代碼,作爲第二線需要有不同的語法,即:

myfruit.Name.Primary = "green" 
myfruit.Name.Spanish = "verde" 

然而,如果這裏的目標是隻處理用戶界面的翻譯,還有其他的選擇。有關詳細信息,請參閱MSDN上的Introduction to International Applications Based on the .NET Framework

+0

不,這個語言只是一個(不好)的例子。我認爲你的回答是完美的,現在就努力實施。謝謝。 –

+2

@ScottBeeson這就是爲什麼我試圖以這種方式寫出來 - 不知道這是否意圖成爲「通用」問題,或者您的語言問題是手頭的具體問題。 –

+0

是的,這個按我想要的方式工作。謝謝!在你讓我回答之後會接受你的答案:) –

0

我最初認爲裏德的回答是我以後的回答。在我的應用程序中,我想使用「子屬性」在表單標籤上設置屬性。 (我試圖發出只有我想提供給自定義控件的標籤屬性)

我嘗試這樣做:

Public Class Fruit 
    Private _name As New Translations 
    Public Property Name As Translations 
     Get 
      Return _name 
     End Get 
     Set(value As Translations) 
      _name = value 
      _PrimaryCaps = _name.Primary.ToUpper 
     End Set 
    End Property 
    'Private variable is automatically added for unexpanded property 
    Public Property PrimaryCaps As String 
End Class 

Public Class Translations 
    Public Property Primary As String 
    Public Property Spanish As String 
End Class 

然後

Dim myFruit As New Fruit 
myFruit.Name.Primary = "Apple" 
myFruit.Name.Spanish = "Manzana" 
Dim primaryCaps As String = myFruit.PrimaryCaps 

古怪 - 至少對我來說 - 這不起作用; myFruit.PrimaryCaps不會返回所希望的「APPLE」。看起來,Set for Name從不執行。 (配售_PrimaryCaps分配中獲取返回不工作上面,但是。)

(我認識到,一個PrimaryCaps屬性可以被添加到翻譯類,但同樣,如果你想設置一個這樣沒有幫助外部變量來自水果的一個實例。)

我不知道這是否是「通過設計」,我是否簡單地誤解了預期的功能或內容。在進一步研究之後,我做了一件事,那就是這種結構在.NET中並不常見;例如設置控件的大小按如下規則進行:

oControl.Size = New Drawing.Size(20, 15) 

,而不是簡單的設置,也就是說,直接Width屬性:

oControl.Size.Width = 20 

(後者將無法編譯:「表達的是一種價值因此不能成爲任務的目標。「)

如果有人對此有更多的瞭解,我很樂意聽到它。例如,我知道這可以簡單地通過使用Fruit實例來完成,但這不是重點。