C#特性(Attribute)与自定义特性

本文详细介绍了C#中的预定义特性如Obsolate(标记过时方法)、Browsable(控制属性显示)、Description(属性描述)和DefaultValue(默认值)等,以及自定义特性的创建和使用,包括Conditional(条件编译)和在WindowsForms中的应用实例。
摘要由CSDN通过智能技术生成

   1 一般放置在类前、 属性前、 方法前等使用这个特性 方法附带一些解释信息、
   2 特性的格式:[特性名(参数列表)]

    例如
      1 不带参数的特性 [Serializable] 定义类前 ,表示这个类可以被序列化
      2 带参数的特性:[Browsable(true)] 允许属性可以显示窗体属性面板上(tag等)
      3 带多个参数特性[特性("参数1","参数2")]

      使用特性 可以使用多个特性
      例如

       [Browsable(true)]
       [Description("这是一个整型的变量")]
       [Category("外观"),DefaultValue(19)]
       public int A;

多个特性可以通过一个[]进行连接
       [Browsable(true), Description("这是整型变量"), Category("外观"), DefaultValue(19)]
       public int A;

特性的分类:预定义特性和自定义特性
 预定义特性:。net提供内置的特性
 1 Obsolate: 定义某个属性或者方法是过时,然后会在提示请使用其他方法进行替代
  [Obsolete(参数1,参数2)]
  参数1是一个提示信息 字符串格式.
   参数2是一个bool值,是不是一个错误, 如果是true直接报红色错误。

2 Conditional,条件编译;根据这个特性设置的条件执行对应方法。

语法:[Conditional(参数1)]参数1是一个条件,在form1.cs演示

接下来演示一下Obsolate

Obsolate: 定义某个属性或者方法是过时,然后会在提示请使用其他方法进行替代

创建一个静态无返回值方法

第一种情况:

然后再我们方法上面添加这个特性

[里面参数分别是这个过时属性加("里面的话自己随便定义")]

  [Obsolete("Dont use UseOldMoney,please use other function instead ")]

如果在Main调用方法鼠标放在上面则显示

第二种情况 过时属性加上最后加上true

 [Obsolete("Dont use UseOldMoney1,please use other function instead",true)]

在定义一个静态无返回值方法

这里在Main调用方法则会报错

接下来演示一下其他特性

Browsable:设置控件某一属性或事件是否出现在“属性”窗口中

Description:指定控件某一属性或事件出现在“属性”窗口中的说明文字(描述特性)

DefaultValue用于为属性指定另一个“默认值”等

  Application  类属于System.Windows.Forms 命名空间

如果appliction报错没提示就引用一下 System.Windows.Forms 命名空间

 Application   类具有用于启动和停止应用程序和线程以及处理  Windows   消息的方法。调 用  Run  以启动当前线程上的应用程序消息循环,并可以选择使某窗体可见。调用   Exit  或   ExitThread  来停止消息循环。当您的程序在某个循环中时,调用  DoEvents   来处理消息。调用  AddMessageFilter   以向应用程序消息泵添加消息筛选器来监视  Windows   消息。IMessageFilter  使您可以阻止引发某事件或在调用某事件处理程序前执行特殊操作。     

 Run  已重载。在当前线程上开始运行标准应用程序消息循环。

接下来我们创建两个Windows窗体

在Form1windows窗体的cs里

我们让其窗体出现颜色属性

 [Browsable(true)](设置控件某一属性或事件是否出现在“属性”窗口中)

 [Description("这是一个颜色关于文字字体的颜色")]描述特性

[Category("外观"), DefaultValue("System.Drawing.Color.Red")]//属性分类 属性默认值

 public Color MyColor { get; set; }=Color.Red;这个就是对应的Browsable的颜色属性

让其Form2窗体继承于Form1

  public partial class Form2 : Form1

然后运行在关闭所有窗口在打开Form2窗体看属性

Conditional 讲一写函数隔离出来,相比来说特性隔离策略要比#if#endif不容易出错

 [Conditional("URL")]当定义URL执行f1方法 #define进行定义

public void f1()
        {
            Console.WriteLine("有定义URL时候执行");
        }

 [Conditional("Debug")]当定义Debug执行f2方法 #define进行定义

 public void f2()
        {
            Console.WriteLine("没有定义URL时候执行");
        }

定义URL和Debug

在Main调用方法然后打印结果如下

条件编译  根据一个条件执行不同的代码 一般脚本最上面的进行定义条件

定义URL

在最上面定义URL

没有定义URL

自定义特性

创建自定义特性步骤

1声明自定义特性(创建一个自定义特性类)
2构建自定义特性 (添加自定义特性类属性和方法)
3在目标程序上应用自定义特性(使用自定义特性)
4通过反射访问特性 (通过自定义特性访问类型属性和方法)

 添加特性使用的地方 例如特性在类前面、方法前、字段前等进行使用
     class 允许特性写在类前面
     Constructor允许特性写在构造函数前面
     Method允许特性写在函数前面
     Propetry允许特性写在属性前面
     AllowMultiple是否允许多用

 [AttributeUsage(AttributeTargets.Class|AttributeTargets.Constructor|AttributeTargets.Method|AttributeTargets.Property,AllowMultiple =true)]

1 创建一个自定义特性类

2添加属性和方法

3添加特性使用的地方 例如特性在类前面、方法前、字段前等进行使用(就是上面[Attributeusage里])

4验证特性

private必须要赋值上 public可以不用赋值

总结:

1 Obsolate: 定义某个属性或者方法是过时,然后会在提示请使用其他方法进行替代

2 Conditional,条件编译;根据这个特性设置的条件执行对应方法。

条件编译  根据一个条件执行不同的代码 一般脚本最上面的进行定义条件(#define)

Conditional 讲一写函数隔离出来,相比来说特性隔离策略要比#if#endif不容易出错。

 [Browsable(true)](设置控件某一属性或事件是否出现在“属性”窗口中)

 [Description("这是一个颜色关于文字字体的颜色")]描述特性

[Category("外观"), DefaultValue("System.Drawing.Color.Red")]属性分类 属性默认值

创建自定义特性步骤
1声明自定义特性(创建一个自定义特性类)
2构建自定义特性 (添加自定义特性类属性和方法)
3在目标程序上应用自定义特性(使用自定义特性)
4通过反射访问特性 (通过自定义特性访问类型属性和方法)

                                        每天进步一点点 每日成长一点点

                                       ​​​​​​​

                                   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值