向 .NET 类添加动态属性

本文关键字:动态 属性 添加 NET | 更新日期: 2023-09-27 18:33:42

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

在此示例中,对象是列表,但我的意思是任何类型的对象(.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
}

向 .NET 类添加动态属性

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

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

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

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

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();
}