这个问题来自论坛提问,对于初学者来说确实比较陌生,msdn参考文档
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,FormClosedEventArgse)
...
{
}
而不是先前的
private
void
Form2_Load(
object
sender,EventArgse)
...
{
}
对于这个语法比较好奇的朋友请仔细阅读上面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(
"
jinjazzforTestClass
"
)]
[Test2(
12356
)]
public
class
TestClass
...
{
//
给字段和属性测试
[Test1(
"
jinjazzfor_aa字段
"
)]
public
string
_aa
=
""
;
[Test1(
"
jinjazzforaa属性
"
)]
public
string
aa
...
{
get
...
{
return
_aa;}
}
//
给方法和事件测试
[Test1(
"
jinjazzfortest方法
"
)]
public
void
test()
...
{}
[Test1(
"
jinjazzforonTest事件
"
)]
public
event
System.EventHandleronTest;
}
}
分享到:
相关推荐
C#属性及类的简单实用
数据实体类中如何给属性赋值.因为从数据库中取出来的是一个DataSet如果一个一个给数据实体类中的属性赋值显的非常的笨拙,而且我们的数据表多达100个.在网上搜索了下写出了个简单的方法,代码如下: 首先我们做个实体...
C#显示文件属性信息,C#文件操作类C#显示文件属性信息,C#文件操作类C#显示文件属性信息,C#文件操作类C#显示文件属性信息,C#文件操作类
C#遍历类的属性,这个主要用到C#的反射,该技术是每个开发者必备的,必须熟悉,可以信手拈来的技能,熟练后,让你以后的开发之旅,一路靓丽。
最完整的控件属性说明 对开发C#绝对有帮助 C#控件及常用设计整理 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 (2) WindowState属性: 用来获取...
C#控件属性列表
C#中类、属性、字段、方法简单小例子 C#简单入门
属性控件的使用,C#中使用属性控件添加属性窗口。。
.net c#动态创建程序集、类、属性、方法等 参考文章 http://hi.baidu.com/live36524/blog/item/5cbba22b4716cb87033bf6b3.html
C# 生成属性 封装字段 多个字段一起生成 C# 生成属性 封装字段 多个字段一起生成
最近有遇到两个类之间的赋值问题,两个类的属性几乎都一样的,所以写了个通过反射获取属性的然后赋值的方法,把一个类的属性的值赋值给另一个类。 框架是.net 4.5 public static D Mapper(S s) { D d = Activator...
C# 自定义属性在propertyGrid控件中显示 演示demo
C# 获取文件属性C# 获取文件属性C# 获取文件属性C# 获取文件属性C# 获取文件属性C# 获取文件属性C# 获取文件属性
实例讲解c#中常规属性和自动属性的区别,对初级者的学习和理解很有帮助!
自定义属性集合编辑器,支持两种方式(UserControl, Component)进行属性编辑并自动产生持久化代码。代码参考网络。
C#中Control类中定义的基础控件属
C#的属性代码自动生成器
C#控件和属性大全.doc
c#中为什么要用属性,1、在给一个对象附值时,可以通过属性SET方法,对这个值进行一个过滤,看这个值服不服合属性的要求。2、有的对象的属性,需要只读的的,就可以省去SET方法,有的是只写的,就可以省去GET方法。 ...
查看文件属性C#做的查看文件属性C#做的查看文件属性C#做的查看文件属性C#做的查看文件属性C#做的查看文件属性C#做的