2010-02-17 61 views
0

對不起,這可能是一個非常基本的問題。我有一個定義的屬性一類vb.net如下:使用動態引用更新某個類的屬性

Private m_Property1 As String 
    Public Property Property1() As String 
     Get 
      Return m_Property1 
     End Get 
     Set(ByVal value As String) 
      If IsNothing(value) Then 
       m_Property1 = String.Empty 
      Else 
       m_Property1 = value 
      End If 
     End Set 
    End Property 

我可以再設置值如下:

classname.Property1 = "myvalue" 

我設置的dynmically如定義的屬性的值怎麼辦

Dim strPropertyName As String = "Property1" 

希望是有道理的。

感謝, 喬希

+0

是我還是爲vb.net太羅嗦了。 – JonH 2010-02-17 19:32:25

+1

@JonH:這是殷勤對話。 – 2010-02-17 19:39:16

+0

@JonH - 我會授予你屬性定義。其餘的大部分是關於正確的。 – 2010-02-17 19:45:33

回答

1

你可以使用反射

Dim strPropertyName as string = "Property1" 

Dim pi As PropertyInfo = myClass.GetType().GetProperty(strPropertyName) 
pi.SetValue(myClass.GetType(), "some string", Nothing) 
1

你想爲了做到這一點使用反射。如果您知道編譯時的值,VB.NET提供了一種方法,但對於運行時操作,您需要使用GetType關鍵字來獲取類的類型(或者,使用GetType方法它的一個實例,如果你不知道它)。

然後,使用該類型實例,您將調用GetProperty,並將該屬性的名稱傳遞給該字符串。它會返回一個PropertyInfo實例,然後你調用GetValue,將對象的實例傳入,這將返回一個Object,您必須將其返回到您想使用的類型(如果您是)。

使用CallByName函數,VB.NET使這一切變得更加簡單。

另外,如果你知道在編譯時是什麼屬性的名稱,你可以隨時轉換爲對象,並用VB.NET的固有後期綁定:

Dim o As Object = <your object> 

o.Property1 = ... 

VB.NET將執行後期爲你綁定。

+0

我永遠不會推薦後期綁定,但反射是滾動的方式。 – 2010-02-17 19:40:46