C#中的自定义属性:如何创建定义其他几个属性的属性?

时间:2010-07-29 10:48:38

标签: c# attributes

我在“姓名”字段中定义了以下属性:

[Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(MyResources))]
[Display(Order = 0, Name = ResXStrings.UserName, ResourceType = typeof(MyResources))]
public string Name { get; set; }

我想创建一个如下所示的自定义属性:

[MyAttribute(DisplayName = "Username", ErrorMessage = "ValidationErrorRequiredField", ResourceType = typeof(MyResources))]
public string Name { get; set; }

在代码中定义了另外两个(必需显示)属性。

如何实现这个?

更新 这是不可能的。 感谢所有帮助回答我问题的人。

4 个答案:

答案 0 :(得分:2)

我很确定你无法做到这一点。问题是属性只是附加到类型,方法,属性等的一些元数据。它本身不会任何事情。

由代码消耗元数据来决定如何处理它以及如何操作。

即使某个属性包含某些功能代码(例如System.Web.Mvc.ActionFilterAttribute),正在使用调用它的属性

换句话说,要实现您想要的目标,您必须更改属性的使用者以了解您的新属性。

答案 1 :(得分:2)

我认为你不能。由于属性的使用者经常按类型找到它们,因此新属性必须 一个RequiredAttribute和一个DisplayAttribute。 C#不支持多重继承,因此无法创建这样的类。

答案 2 :(得分:1)

现在可以使用自定义属性执行此操作。您可以尝试实现ICustomTypeDescriptor并添加您想要的任何属性,但我怀疑它在每个场景中都受支持。

答案 3 :(得分:0)

无法直接,但您可以通过应用程序中的某些调整进行此操作,但我不建议这样做< / strong>因为,如果你这样做,你就违反SRP大时间,将两个不同的职责放入同一个班级。

  

请记住,课程必须始终有一个   改变的理由。