当前位置: 首页 > 编程语言 > C#

将Class的实例作为参数传递给Attribute构造函数分享

时间:2023-04-10 21:20:57 C#

C#LearningTutorial:PassinganinstanceofClassasaparametertotheAttributeconstructor非静态成员)。publicclassLoginModel{[AutoComplete(currentInstance)]//传递类或公司名称的实例publicstringDepartmentName{get;放;}publicstring[]DepartmentNames{get{...}}}有没有办法在不使用new()或Reflection的情况下做到这一点。那是完全不可能的。属性在编译时嵌入到程序集的元数据中,因此谈论将类的实例传递给属性是没有意义的,因为该实例仅在运行时存在。另一方面,属性总是被反射消耗,所以我猜你现在正在检查这个自定义属性是否存在于类元数据中,你可以使用那个实例。不可能的人,你不能将实例、委托、lambda表达式传递给属性的构造函数。有人在这里讨论只能使用基元或基元数组作为属性参数,这是因为它们需要在编译时被编译器“内联”。https://msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx是基于MSDN的,如果需要传递一个类的实例来处理,就不能完全完成了。属性参数限制为以下类型的常量值:简单类型(bool、byte、char、short、int、long、float、double)字符串System.Type枚举对象(类型对象的属性参数的参数必须是以上类型的一个常量值。)以上任何类型的一维数组另外,你能解释一下为什么我们站在一个属性上下文中,需要从他们自己的对象中获取信息。这听起来很奇怪,因为我们经常使用Attributes来解释有关对象的更多信息,而不是读取对象数据。为了访问非静态成员,您需要在运行时实例化一个类。我有一个解决方法。如果要使用特定类的实例,可以尝试从列出或表示为枚举的特定类型实例化新实例。我使用工厂模式、策略模式和反射技术来做到这一点。策略模式是实现不同的算法,用枚举类型包装每个类,工厂类负责注册所有类型的实现类,并在运行时根据定义的属性创建合适的类。一开始可能很复杂,但后来显然明白了。这是一个实际的例子:以上是C#学习教程:将Class实例作为参数传递给Attribute构造函数,分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: