C#学习笔记系列
第一章 【C#学习笔记】【StackTrace】
第二章 【C#学习笔记】【Attribute】
文章目录
前言
学习特性的使用,包括对.Net自带的三种预定义特性:Obsolete、Conditional、AttributeUsag的详细讲解,也列举了常用的特性,其中包括控件设计时要用到的一系列特性,最后介绍了如何进行自定义特性(仅以枚举作为示例)。
一、Attribute介绍
Attribute(特性)
MSDN给出定义:
Attribute类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。
目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性(Property)、返回值、结构或其他特性(Attribute)。
二、Obsolete
Obsolete是.Net自带的三种预定义特性之一,该特性可以用来声明程序体是过时的,一个程序在不断迭代更新的过程中,总会出现要用新方法代替老方法的情况,但又不能删除老方法因为旧的项目在用,这是我们使用这个特性就能起到提示作用,Obsolete特性将程序结构标注为被弃用的。
Obsolete有三个重载
public sealed class ObsoleteAttribute : Attribute
{
//表示该程序体是被弃用的
public ObsoleteAttribute();
//string参数可以输入提示内容,在鼠标移动到程序体名称上显示,默认为“已过时”
public ObsoleteAttribute(string? message);
//bool参数用来表示该弃用方法是否编译报警,若为true,被使用时,会产生编译器错误,无法编译成功;若为false,则只是编译警告,告知方法是弃用的,但仍可编译成功并运行
public ObsoleteAttribute(string? message, bool error);
}
三、Conditional
Conditional是.Net自带的三种预定义特性之一,位于System.Diagnostics命名空间下,这个特定通过条件判断决定是否运行下面对应的程序体

可以看到,定义了“Debug”字符串,方法Test1会运行,未定义“Release”字符串,Test2不会被运行。
四、AttributeUsage
AttributeUsag是.Net自带的三种预定义特性之一,仅对继承自Attribute的派生类有效,目的是控制当前类的使用范围。
如下面代码,定义了一个AttributeUsage的自定义特性,在AttributeUsage参数中传入了AttributeTargets.Method,指定当前特性仅对方法有效。
[AttributeUsage(AttributeTargets.Method)]
public sealed class FlowDemoAttribute : Attribute
{
public FlowDemoAttribute() {
}
public string? Name {
get; set; }
public string? GetDisplayName()
{
return Name;
}
}
那么在使用这个特性的时候,就只能定义在方法的上面,若放到其他的机构如字段,就会报错,如下图所示

如果需要指定对多个程序体有效的话,这里写多个目标,中间用 | 隔开,或者指定AttributeUsage.All,表示对所有程序体有效
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
AttributeUsage有两个重载
public sealed class AttributeUsageAttribute: Attribute
{
//AttributeTargets参数规定特性可被放置的语言元素。它是枚举器 AttributeTargets 的值的组合,默认为“AttributeUsage.All”
public AttributeUsageAttribute(AttributeTargets validOn);
//allowMultiple参数,如果为 true,则该特性是多用的。默认值是 false(单用的)
//inherited参数,如果为 true,则该特性可被派生类继承。默认值是 false(不被继承)
public AttributeUsageAttribute(AttributeTargets validOn, bool allowMultiple,

最低0.47元/天 解锁文章
1131

被折叠的 条评论
为什么被折叠?



