No title
No title
John Doe特性
**[Obsolete("这个方法弃用了")]
**:
- 标记已过时的代码,警告开发者该代码不应再使用。
**[DebuggerStepThrough]
**:
- 指示调试器在此方法中跳过步骤调试。
调用者信息特性:
[CallerFilePath]
- 获取调用者的源文件路径。
[CallerLineNumber]
- 获取调用者的源文件行号。
[CallerMemberName]
- 获取调用者的方法名或属性名。
这些特性只能应用于方法参数上,并且它们的值是由编译器在编译时自动插入的。
1 | // 记录日志的方法,带有调用者信息特性 |
自定义特性
1 | [public] sealed class InformationAttribute:Attribute |
特点:
1,自定义特性必须继承自 System.Attribute
类。
2,必须是密封类(sealed)
3,包含三个字段:
1 | public string developer;//开发者 |
定义特性类
特性类的基本定义
1
2
3
4
5
6
7
8
9
10
11
12
13using System;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class MyCustomAttribute : Attribute
{
public string Description { get; }
public MyCustomAttribute(string description)
{
Description = description;
}
}AttributeUsage
特性指定了这个特性可以应用于哪些代码元素(AttributeTargets.Class | AttributeTargets.Method
),是否可以继承(Inherited = true
),以及是否可以多次应用(AllowMultiple = false
)。特性类的属性和字段
特性类可以包含公共属性和字段,以便存储附加的信息。
1
2
3
4
5
6
7
8
9
10
11
12
13[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class DocumentationAttribute : Attribute
{
public string Author { get; }
public string Version { get; }
public DocumentationAttribute(string author, string version)
{
Author = author;
Version = version;
}
}
总结
- 特性类的定义:必须继承自
System.Attribute
,可以包括构造函数、属性和字段。 - **
AttributeUsage
**:指定特性适用的代码元素、继承性和是否可以多次使用。 - 特性的应用:将特性应用到类、方法等代码元素上。
- 读取特性信息:使用反射在运行时获取特性信息。