首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您能创建一个功能类似于多个的自定义属性吗?

您能创建一个功能类似于多个的自定义属性吗?
EN

Stack Overflow用户
提问于 2017-06-19 14:36:11
回答 2查看 97关注 0票数 0

假设您在模型中有一个属性,如下所示:

代码语言:javascript
复制
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime CreationDate { get; set; }

你能这样做吗?

代码语言:javascript
复制
[ComboAttribute] // Does the same thing as the two attributes above
public DateTime CreationDate { get; set; }

我正在探索如何确保我的所有DateTime属性具有相同的4到5个属性集。如果我必须添加或更改一个属性,目前我必须使用Ctrl + F并确保得到每个实例,这只是自找麻烦。

这个是可能的吗?有更好的方法来获得我正在寻找的防错方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-19 15:13:30

属性是附加类型或成员定义的数据结构。在运行时,组件可以使用反射API来查找应用于类型或成员的属性,并相应地调整它们的行为。

重要的是要理解属性本身不会做任何。总是有一段代码在寻找特定的属性。如果定义了新属性,代码将不会找到它,除非它正在查找与特定约定匹配的属性或从特定基类型继承的属性。您需要理解寻找属性的代码,以便了解是否可以创建自己的.

对于创建属性聚合的具体任务,唯一可以工作的是一个预处理器(如PostSharp),它可以接受您的自定义属性并重新编写代码,就好像您已经将这两个属性放在了那里一样。

如果您确实沿着PostSharp路线走下去,这里有一个使用自定义属性生成属性的示例:如何使用PostSharp属性注入属性?

票数 1
EN

Stack Overflow用户

发布于 2017-06-19 15:09:17

这里有两个问题:第一个问题是,不管框架期待什么属性,都会查找属性(例如,MVC期望属性上有一些属性)。第二,您的属性将执行所有属性组合的逻辑。

对于第一个问题,您的属性必须从已知的基本属性(如ValidationAttribute )继承,或者实现一个已知的接口(如IActionFilter ),这取决于您想要替换哪些属性。

对于第二个问题,您的属性可以实例化它要替换的每个属性的实例,并将它继承/实现的功能委托给适当的属性实例。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44633413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档