C#中的属性类(Attribute类)
来源:互联网 发布:有粤语听书软件 编辑:程序博客网 时间:2024/05/17 03:56
http://msdn.microsoft.com/zh-cn/library/system.attribute.ASPx
我们先直观的表达一下他的作用之一:
比如一个自定义Windows控件的DefaultEvent可以表示一个控件默认事件:
如你双击form他会默认到onLoad事件中,双击button,他会默认到onclick事件中。
一个简单的测试,你添加一个Windows窗体1叫Form1,然后增加如下代码
[DefaultEvent("FormClosed")]
public partial class Form1 : Form
然后新建一个窗体2,继承自窗体1
public partial class Form2 : Form1然后把Form2切换到设计器的模式,然后双击Form2的工作区域,会直接定位到代码的 private void Form2_FormClosed(object sender,FormClosedEventArgs e)
...{
}而不是先前的 private void Form2_Load(object sender, EventArgs e)
...{
}
对于这个语法比较好奇的朋友请仔细阅读上面msdn的参考文档.
简要的说他不是系统规定死的写法,是属性类,
可以在运行期去决定做什么,就像一般的类.
除了系统已经定义的还可以自己定义.
中括号中的语法其实就是一个类的构造函数的调用.
我们可以通过反射得到属性类的实例.
属性类可以修饰类,变量,属性,成员函数,事件等
运行下面的测试代码,可能更加直观的理解他,下面展现了如何自己定义属性类并使用.
using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication11...{ class Program ...{ static void Main(string[] args) ...{ //获取类上的属性类 foreach (object obj in typeof(TestClass).GetCustomAttributes(false)) ...{ Console.WriteLine(obj.GetType().Name + ":" + obj.ToString()); } //获取字段属性类 foreach (object obj in typeof(TestClass).GetField("_aa").GetCustomAttributes(typeof(Test1), true)) ...{ Console.WriteLine(obj.GetType().Name + ":" + obj.ToString()); } //获取属性属性类 foreach (object obj in typeof(TestClass).GetProperty("aa").GetCustomAttributes(typeof(Test1), true)) ...{ Console.WriteLine(obj.GetType().Name + ":" + obj.ToString()); } //获取方法属性类 foreach (object obj in typeof(TestClass).GetMethod("test").GetCustomAttributes(typeof(Test1), true)) ...{ Console.WriteLine(obj.GetType().Name + ":" + obj.ToString()); } //获取字事件性类 foreach (object obj in typeof(TestClass).GetEvent("onTest").GetCustomAttributes(typeof(Test1), true)) ...{ Console.WriteLine(obj.GetType().Name + ":" + obj.ToString()); } Console.Read(); } } //测试属性类,传入string public class Test1 : System.Attribute ...{ string strName = ""; public Test1() ...{ } public Test1(string str) ...{ strName = str; } public override string ToString() ...{ return strName; } } //测试属性类,传入int public class Test2 : Attribute ...{ int _f; public Test2(int f) ...{ _f = f; } public override string ToString() ...{ return _f.ToString(); } } //给class测试 [Test1("jinjazz for TestClass")] [Test2(12356)] public class TestClass ...{ //给字段和属性测试 [Test1("jinjazz for _aa字段 ")] public string _aa = ""; [Test1("jinjazz for aa 属性")] public string aa ...{ get ...{ return _aa; } } //给方法和事件测试 [Test1("jinjazz for test 方法")] public void test() ...{ } [Test1("jinjazz for onTest 事件")] public event System.EventHandler onTest; }}
- C#中的属性类(Attribute类)
- 初始C#中的Attribute类
- 初始C#中的Attribute类
- 学习C#中的特性Attribute 类
- C# 反射获取 Metadata类,获取类的Attribute 属性
- C#中的属性类
- C#中的属性类
- C#中的属性类
- C#属性(attribute)
- 区别C#中的两个属性(Property和Attribute)
- 区别C#中的两个属性(Property和Attribute)
- 1 C#中的两个属性(Property和Attribute) 区别
- 区别C#中的两个属性(Property和Attribute)
- 区别C#中的两个属性(Property和Attribute)
- 区别C#中的两个属性(Property和Attribute)
- 区别C#中的两个属性(Property和Attribute)
- 区别C#中的两个属性(Property和Attribute)
- 区别C#中的两个属性(Property和Attribute)
- redis+keepalived 实现HA
- SVN服务器搭建和使用(一)
- MQX4.0:MK60DZ10.h头文件GPIO模块代码分析
- DB2 SES安装过程中的两个错误SQL6031N和SQL1032N的解决方法
- #AWK# 统计各时段设置情况
- C#中的属性类(Attribute类)
- SVN服务器搭建和使用(二)
- $(fn) 与 $(document).ready()
- 第四十九节 java学习——事件
- thinkphp __PUBLIC__ 解决方案与理解
- Linux磁盘或者其他类型服务器压力测试的几款工具简介
- 【Oracle导入导出】exp与imp(一)
- Win7环境下Java串口数据读写(RXTX)(转载)
- 如何进行gpg签名字