2013-09-16 124 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实例来完成,但这不是重点。