创建一个类并在运行时装饰它

时间:2014-02-22 07:44:04

标签: c# .net class

我有一个像这样的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(这个的值来自另一个来源)来装饰它以获得所需的结果?

1 个答案:

答案 0 :(得分:4)

Reflection.Emit包含许多帮助您实现此目标的工具:

  

Reflection emit提供以下功能:

     

...

     

在运行时定义模块中的类型,创建这些类型的实例,并调用它们的方法。

另外(尽管从未使用过),我的理解是you can also use a TypeDescriptor to achieve this

  

TypeDescriptor是一种可扩展的检查机制,不仅适用于组件,而且适用于所有类型和任何给定类型的单个实例... TypeDescriptor允许您检查和修改目标中的任何元数据(添加,更改和删除)可以想象的方式。对于本文的其余部分,术语target将引用所有.NET Framework类型集(包括从COM导入的类型)的元素以及每个.NET Framework类型的所有实例。