3.9C#引用类型之特性(Attribute)

特性声明

以下示例声明了 HelpAttribute 特性。

所有特性类都派生自 System.Attribute 基类。

using System;

public class HelpAttribute : Attribute
{
    string _url;
    string _topic;

    public HelpAttribute(string url) => _url = url;

    public string Url => _url;

    public string Topic
    {
        get => _topic;
        set => _topic = value;
    }
}

调用特性

调用特性时,在相关声明前的方括号内指定特性的名称以及实参。

如果特性的名称以 Attribute 结尾,那么可以在调用特性时省略 Attribute

[Help("http://msdn.microsoft.com/.../MyClass.htm")]
public class Widget
{
    [Help("http://msdn.microsoft.com/.../MyClass.htm", Topic = "Display")]
    public void Display(string text) {}
}

特性目标

特性目标是显式的指定此特性应用于哪个目标。

[target : attribute-list]

NonSerializedAttribute 只能附加到字段,不能附加到属性。可使用特性上的 field: 说明符将 NonSerializedAttribute 附加到 Id 属性的支持字段,如下例所示:

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    [field:NonSerialized]
    public int Id { get; set; }

    public string FullName => $"{FirstName} {LastName}";
}
target值应用场景
assembly整个程序集
module当前程序集模块
field类或结构中的字段
event事件
method方法或 get 和 set 属性访问器
param方法参数或 set 属性访问器参数
property属性
return方法、属性索引器或 get 属性访问器的返回值
type结构、类、接口、枚举或委托

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/11487.html

(0)
上一篇 2021年3月8日 05:37
下一篇 2021年3月10日 20:35

相关推荐

  • 2.10C#函数成员之析构函数(Destructor)

    析构函数 是在垃圾回收过程中实现析构类的实例所需的操作的成员。 析构函数不能有参数,它们不能具有可访问性修饰符,也不能被显式调用。

    C#语言教程 2021年2月10日
    01050
  • 3.2C#值类型之结构(Struct)

    1.结构声明 struct 类型定义包含数据成员和函数成员的结构,这一点与类类型相似。 2.继承 所有结构类型只能隐式派生自 System.ValueType类,结构类型之间不支持用户自定义的继承,因为已密封。 3.创建对象 结构的创建对象与类的创建对象相同。 4.结构与类的区别 类是引用类型。创建类的对象后…

    C#语言教程 2021年3月2日
    01420
  • 2.6C#函数成员之索引器(Indexer)

    索引器声明 索引器的声明方式与属性类似,不同之处在于,格式为索引器名称 this 后跟 分隔符 [ 和 ] 以及参数列表。这些参数在索引器的访问器中可用。  访问器 类似于属性,索引器分为读写、只读和只写索引器。 访问索引器 重载 索引器支持重载。

    C#语言教程 2021年2月6日
    01140

发表评论

登录后才能评论