当前位置: 首页 > news >正文

网站建设交流论坛网站设计风格确认书

网站建设交流论坛,网站设计风格确认书,企业网站php源码,公司装修深圳【.NET Core】特性#xff08;Attribute#xff09;详解 文章目录 【.NET Core】特性#xff08;Attribute#xff09;详解一、概述二、编写自定义属性2.1 自定义特性的主要步骤2.2 应用AttributeUsageAttributeAttributeTargets 成员Inherited属性AllowMultiple属性 三、声…【.NET Core】特性Attribute详解 文章目录 【.NET Core】特性Attribute详解一、概述二、编写自定义属性2.1 自定义特性的主要步骤2.2 应用AttributeUsageAttributeAttributeTargets 成员Inherited属性AllowMultiple属性 三、声明特性类四、声明构造函数特性类五、声明属性的特性类六、自定义特性示例七、总结八、参考 一、概述 公共语言运行时添加类的关键描述性声明称为特性以便批注编程元素如类型、字段、方法和属性。编译运行时的代码时它将被转换为中间语言MSIL,并和编译器生成的元数据一起放置在可移植可执行文件内。特性使得将额外的描述信息放到可使用运行时反射服务提取的元数据中。当你声明派生自System.Attribute 的特殊类的实例时编译器会创建特性。 在.NET内置了很多特性这些特性描述数据序列化、指定用于强制安全性的特性并限制通过实时JIT编译器进行优化来对代码进行调优。 二、编写自定义属性 2.1 自定义特性的主要步骤 应用AttributeUsageAttribute声明特性类声明构造函数声明属性 2.2 应用AttributeUsageAttribute 自定义属性声明以System.AttributeUsageAttribute属性开头定义特性类的一些主要特性。 AttributeUsageAttribute包含下列三个成员它们对创建自定义属性非常重要AttributeTargets、Inheited和AllowMultiple。 AttributeTargets 成员 成员值说明All32767属性可以应用于任何应用程序元素。Assembly1属性可应用于程序集。Class4属性可应用于类。Constructor32属性可应用于构造函数。Delegate4096属性可应用于委托。Enum16属性可应用于枚举。Event512属性可应用于事件。Field256属性可应用于字段。GenericParameter16384属性可应用于泛型参数。目前这个属性只能在C#,Micrsoft中间语言MSIL和emitted代码中。Interface1024属性可应用于接口。Method64属性可应用于方法。Module2属性可应用于模块。模块指的是可移植的执行文件.dll或.exe,而不是Visual Basic标准模块。Parameter2048属性可应用于参数。Property128属性可应用于属性。ReturnValue8192属性可应用于返回值。Struct8属性可应用于结构也就是值类型。 Inherited属性 AttributeUsageAttribute.Inherited属性指明要对其应用属性的类的派生类能否继承此属性。此属性使用true默认值或false标志。 public class MyAttribute : Attribute {//... } [AttributeUsage(AttributeTargets.Method, Inherited false)] public class YourAttribute : Attribute {//... }AllowMultiple属性 AttributeUsageAttribute.AllowMultiple属性指明元素能否包含属性的多个实例。如果设置为true,则允许多个实例。如设置为false默认值那么只允许一个实例。 /// summary /// AllowMultiple false 不允许多个属性 /// /summary [AttributeUsage(AttributeTargets.Method,AllowMultiple false)] public class MyAttribute:Attribute {///方法体 } /// summary /// AllowMultiple false 允许多个属性 /// /summary [AttributeUsage(AttributeTargets.Method, AllowMultiple true)] public class MultipleMyAttribute : Attribute {///方法体 }当应用这些特性的多个实例时MyAttribute会生成编译器错误吗。以下代码示例显示MultipleMyAttribute的有效以及MyAttribute无效用法 public class AttributeService {// This produces an error.// Duplicates are not allowed.[MyAttribute()][MyAttribute()]public void Get() {}// This is valid.[MultipleMy][MultipleMy]public void Update() { } }如果AllowMultiple属性和Inherited属性都设置为true从另一个类继承的类可以继承一个属性并具有在同一个子类中应用相同属性的另一个实例。如果AllowMultiple设置为false,则父类中的所有特性的值将被子类中一特性的新实例覆盖。 三、声明特性类 应用AttributeUsageAttribute以后开始定义属性的细节。特性类的声明类似与传统类的声明。如以下代码所示 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,AllowMultiple false)] public class MyAttribute:Attribute {/// }此特性定义说明了以下几点 特性类必须声明为公共类。按照约定特性类的名称以单词Attribute结束。官方虽然没有要求但是扔建议执行此约定以保证可读性。应用特性时可以选择是否包含单词Attribute。所有特性类必须直接或间接从System.Attribute类继承。 四、声明构造函数特性类 和传统类类似特性是通过构造函数初始化的。下面的代码段阐明了典型的特性构造函数。此公共构造函数采用一个参数并设置一个等于其值的成员变量。 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,AllowMultiple false)] public class MyAttribute:Attribute {private string myValue;public MyAttribute(string myValue){this.myValue myValue;} }可以重载此构造函数以适应值的各种组合。如果你还未自定义特性类定义了属性则在初始化该特性时可以使用命名参数和定位参数的组合。通常情况下将所有必须的参数定义为定位参数将所有可选的参数定义为命名参数。在这种情况下没有必需的参数就无法初始化属性。其他所有参数都是可选参数。 五、声明属性的特性类 如果你想要定义一个命名参数或者提供一种简单的方法来返回由特性存储的值请声明属性。应将特性的属性声明为公共实例此公告实体包含将返回的数据类型的描述。定义将保存属性值的变量并将此变量与get和set方法相关联。 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,AllowMultiple false)] public class MyAttribute:Attribute {public string AttributeName {get; set;} }六、自定义特性示例 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,AllowMultiple false)] public class MyAttribute:Attribute {private string author;private DateTime data;private string version;public MyAttribute(string author, DateTime data){this.author author;this.data data;}public virtual string Author {get { return author; }}public virtual DateTime Data {get { return data; }}public string Version {get { return version; }set { version value; }} }可以采用以下任意一种方法调用自定义特性 public class AttributeService {[MyAttribute(AuthorName,2023-12-18 15:14:01)]public void Get(){}[MyAttribute(Author2,2023-12-18 16:14:49,Versionv1.0)]public void Update() { } }七、总结 特性提供声明式编程能力但是它们是一种元数据形式的代码本身并不执行任何操作。可以通过反射来调用特性完成操作。 下一章将详解如何使用反射调用特性。 八、参考 [利用特性扩展元数据](利用特性扩展元数据 | Microsoft Learn)[应用属性](应用特性 - .NET | Microsoft Learn)[编写自定义属性](编写自定义特性 - .NET | Microsoft Learn)
http://www.zqtcl.cn/news/189318/

相关文章:

  • 重庆医院门户网站建设做百度网站电话号码
  • windows网站建设教程网站建设落地页
  • 新加坡做网站的价格网站正则表达式怎么做
  • 三门峡市住房的城乡建设局网站百度指数分析官网
  • 新网站外链怎么做陕西省煤炭建设第一中学官方网站
  • 学校网站建设方面汇报php网站开发和部署
  • 源码建站和模板建站区别商城网站功能
  • 临沂建站公司互联网开网站怎么做
  • 有哪个网站做ic购物网站建设需求
  • 怎么登录甘肃省建设厅网站工信部域名信息备案管理系统查询
  • 怎么才能免费建网站网站套利怎么做
  • .win域名做网站怎么样邯郸的互联网公司
  • 企业网站建设推广实训报告网站目录
  • 找做课件的网站网站建设柒首先金手指9
  • 秦皇岛网站建设公司wordpress百度编辑器
  • 潍坊网站建设联系方式农业网站开发
  • 河北网站制作网站设计依赖于什么设计
  • 深圳网站优化培训wordpress内页关键词
  • 上栗网站建设企业网站建设报价方案
  • 广州网站开发公司公司级别网站开发
  • 做网站备案哪些条件怎样选择网站的关键词
  • 有没有专门做名片的网站忘记网站后台账号
  • 重庆建设工程招标网站印尼建设银行网站
  • 什么是网站流量优化四川住房建设厅网站
  • 现在还有企业做网站吗做百度推广送的网站
  • 公司年前做网站好处互联网推广运营是做什么的
  • 公司网站建设杭州钓鱼网站制作的报告
  • 宁海有做网站的吗网络规划设计师需要掌握哪些
  • 百度云注册域名可以做网站明码有了主机如何做网站
  • 门户网站推广方案连云港市电信网站建设