加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 当我为一个类的字段赋值时,添加一些与特定字段关联的元数

发布时间:2020-12-16 01:42:52 所属栏目:百科 来源:网络整理
导读:我有一堂课,我正在用反思做一些漂亮的事情. 现在,当我使用反射为类的字段赋值时,我需要添加一些与特定字段关联的元数据(我不知道该类是什么). 我想这样做,没有客户对我的实施知道(必须做他们自己的特殊事情). 在类中具有指定的“元”字段或对象将起作用,但是
我有一堂课,我正在用反思做一些漂亮的事情.

现在,当我使用反射为类的字段赋值时,我需要添加一些与特定字段关联的元数据(我不知道该类是什么).

我想这样做,没有客户对我的实施知道(必须做他们自己的特殊事情).

在类中具有指定的“元”字段或对象将起作用,但是不会感觉非常优雅,因为它要求子类做一些“兼容”的事情.我想动态地将这个元信息附加到现有的类,但仍然允许它被视为与应用程序的其余部分相同的类.我希望以后能够恢复这个元信息.

>类被传入
>通过Reflection with赋值(映射)
附加元信息
>班级归来

*此过程在正常操作和类的对象类型方面应该没有副作用.对于一般应用,该类应该在之前和之后相同.

>应用程序对类进行“正常”工作(分配值,获取值,验证信息等).
> Class将在稍后传回
>使用值和元信息来执行某些操作

细分到最简单的术语,我基本上在寻找一种方法来“回送”任何类实例上的额外信息,而无需特殊的编译时修改.

我意识到这是一个奇怪的问题,有一些奇怪的约束,但可以做到吗?

解决方法

如果您需要每种类型的额外状态而不是实例,则适用

您最好的选择是对该字段使用自定义属性.

1)所以创建属性:

[AttributeUsage(AttributeTargets.Field)]
public class MyCustomAttribute : Attribute
{

}

2)装饰领域:

class MyClass
{
    [MyCustomAttribute]
    private int _myField;
    ....

}

3)然后在你的反思中:

if(fieldInfo.GetCustomAttributes(typeof(MyCustomAttribute),true).Length>0)
{
   ...
}

如果它必须在实例中

如果数据是实例的一部分那么

>任一实例都需要允许其存储
> state需要存储在像字典这样的单独类中

第二种方法是首先想到并且直截了当的方法.在第一个音符上,可以

>将状态定义为可以保存信息的单独属性.这是你建议的那个,你不满意.
>从提供额外功能的基类继承
>创建一个通用类型,例如元数据< T>这将为所有类型提供此类功能

我倾向于喜欢第三个可以封装反映类型T并创建必要的占位符来存储额外状态.这个问题的主要问题是你不能将类型作为参数传递给方法.这似乎是第二种解决方案最实用的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读