2014-02-22 31 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类型的所有实例。