向.NET类添加动态属性

时间:2013-10-03 15:39:51

标签: c# extension-methods

是否可以将自己的自定义属性添加到任何类型的对象中?

在这个例子中,对象是List,但我的意思是任何类型的对象(.NET或自定义对象)。

例如,扩展List<string>以添加名为MyProperty的额外属性:

List<string> myList = new List<string>();
myList.MyProperty = "some value";

然后调用方法ProcessList(List<string> list)

ProcessList(myList);

public void ProcessList(List<string> list)
{
  // get the custom property value

  string myprop = list.MyProperty.ToString();
  ....................
  do other work
}

2 个答案:

答案 0 :(得分:1)

没有。 .NET中没有“扩展属性”实现。扩展方法更多的是编译技巧,只能作为静态方法使用,因为它们不需要自己的状态(至少不应该)。

属性需要一个支持字段,这需要其他功能才能正确实现。

请注意,某些框架确实支持此功能。例如,如果您的对象派生自DependencyObject,则可以使用Attached Properties来实现此功能。

答案 1 :(得分:0)

不是你描述的方式。扩展方法可能是你最接近的。

public static class QueryExtensions
{
    public static bool HasMapping(this Demand role)
    {
        return role.DemandMappings.Count > 0;
    }
}

您可以像上面这样使用上面的示例:

var role = GetDemand(Request.QueryString["id"]);
if (role != null)
{
    var mapped = role.HasMapping();
}