2017-06-06 103 views
0

我想動態地創建一個類,並動態地向該類添加屬性 ,之後我想創建該類的對象和該類的泛型列表,並訪問它像這樣: enter image description here動態類的創建和訪問類屬性c#

+0

什麼你試過嗎?在運行時創建類時,無法在設計器中看到這些屬性。除非你已經實現了一個接口。 –

+0

您是否考慮過查看匿名類型? https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types – Droxx

+0

您是否試圖在C#中使用mixin功能?不幸的是C3不支持mixin。 https://en.wikipedia.org/wiki/Mixin –

回答

-1

您可以創建類的一個列表:

List<ClassA> list = new List<ClassA>(); 

和你創建該類的對象,具有添加到列表:

list.Add(dynamic); 
+0

我不想將動態對象添加到_ClassA_ I要動態創建_ClassA_並創建該類的列表,並將該類的對象添加到列表中並訪問該類的屬性,如上圖中所示。 – Abhay

-1

如果你只是想在一個未定義格式的數據,你可以使用字典
例:
字典<字符串,對象> PARAM =新詞典<字符串對象>();
param.Add(「msg」,「hello」);
param.Add(「number」,1234);

後來可能是訪問爲:
PARAM [ 「消息」]作爲字符串
PARAM [ 「數量」]作爲INT

1

微軟發佈了一個庫,用於創建動態LINQ查詢。有一個ClassFactory可以用來在運行時創建類。

下面是一個例子:

class Program 
{ 
    static void SetPropertyValue(object instance, string name, object value) 
    { 
     // this is just for example, it would be wise to cache the PropertyInfo's 
     instance.GetType().GetProperty(name)?.SetValue(instance, value); 
    } 

    static void Main(string[] args) 
    { 
     // create an enumerable which defines the properties 
     var properties = new[] 
     { 
      new DynamicProperty("Name", typeof(string)), 
      new DynamicProperty("Age", typeof(int)), 
     }; 

     // create the class type 
     var myClassType = ClassFactory.Instance.GetDynamicClass(properties); 

     // define a List<YourClass> type. 
     var myListType = typeof(List<>).MakeGenericType(myClassType); 

     // create an instance of the list 
     var myList = (IList)Activator.CreateInstance(myListType); 

     // create an instance of an item 
     var first = Activator.CreateInstance(myClassType); 

     // use the method above to fill the properties 
     SetPropertyValue(first, "Name", "John"); 
     SetPropertyValue(first, "Age", 24); 

     // add it to the list 
     myList.Add(first); 


     var second = Activator.CreateInstance(myClassType); 

     SetPropertyValue(second, "Name", "Peter"); 
     SetPropertyValue(second, "Age", 38); 

     myList.Add(second); 
    } 
} 

您可以在這裏下載:DynamicLibrary.cs