2013-09-16 4 views
2

Если в коде я хотел сделать что-то вроде следующего, как должно выглядеть определение класса? (Имейте в виду фрукты/язык вещь просто пример)Как добавить свойство «sub» к свойству класса

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" 

Однако, если целью является просто обрабатывать перевод пользовательского интерфейса, есть и другие варианты. Для получения дополнительной информации см. Introduction to International Applications Based on the .NET Framework на MSDN.

+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 выше Get Return работает.)

(Я понимаю, что свойство PrimaryCaps можно добавить в класс Translations, но это опять не помогает, если вы хотите установить чужой переменной из экземпляра Fruit.)

Я не знаю, является ли это «по дизайну», просто ли я неправильно понял предполагаемую функциональность или что-то еще. Одна вещь, которую я сделал после дальнейших исследований, заключалась в том, что эта структура не очень распространена вообще в .NET; например, установка размера элемента управления выполняется следующим образом:

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

, а не просто установка, скажем, ширина свойство непосредственно:

oControl.Size.Width = 20 

(Последний не будет скомпилирован: «Выражение значение и поэтому не может быть целью присвоения. »)

Если у кого-то есть более глубокое понимание, чем я, я хотел бы это услышать. Я знаю, что это можно просто сделать, например, используя экземпляр Fruit, но это не главное.

Смежные вопросы