1

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

在此示例中,对象是 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
}
4

2 回答 2

1

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

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

请注意,某些框架确实支持这一点。例如,如果您的对象派生自DependencyObject,您可以使用附加属性来实现此功能。

于 2013-10-03T15:43:03.687 回答
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();
}
于 2013-10-03T15:43:08.713 回答