2014-02-22 34 views
2

我有一個C#類這樣創建一個類,並在運行時裝飾它

public class Info 
{ 
public string PropertyName; 
public int PropertyLength; 

} 

,當我讀到一個文件,並獲取數據回類,它看起來像

List<Info> information=new List<Info>(); 

//代碼從文件中讀取數據並將其添加回列表

information - is a List collecting multiple entries... 

0,1 - elements inside the list.. 

[0] 
PropertyName - FirstName 
PropertyLength - 25 

[1] 
PropertyName - LastName 
PropertyLength - 50 

我想根據上述結果在運行時生成一個類

public class GeneratedClass 
{ 

    [FieldLength(25)]; 
    public string FirstName; 
    [FieldLength(50)]; 
    public string LastName; 

} 

我如何裝飾它與比方說 - FieldLength參數在運行時間(這個值從另一個源來),以獲得如上所期望的結果?

回答

4

Reflection.Emit包含了許多設施,以幫助您實現這一目標:

反射發出提供以下功能:

...

定義類型在運行時模塊,創建這些實例類型,並調用它們的方法。

分開(儘管從來沒有使用它),這是我的理解是you can also use a TypeDescriptor to achieve this

TypeDescriptor不只是組件,但對於所有類型和任何給定類型的單個實例可擴展的檢查機制。 TypeDescriptor允許您以任何可能的方式檢查和修改目標的元數據(添加,更改和刪除)。對於本文的其餘部分,術語「目標」將指代所有.NET Framework類型(包括從COM導入的類型)集合中的一個元素以及每個.NET Framework類型的所有實例。