- 浏览: 611844 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
一.什么是Attribute
先看下面的三段代码:
1.自定义Attribute类:VersionAttribute
- [AttributeUsage(AttributeTargets.Class)]
- public class VersionAttribute : Attribute
- {
- public string Name { get; set; }
- public string Date { get; set; }
- public string Describtion { get; set; }
- }
- class Program
- {
- static void Main(string[] args)
- {
- var info = typeof(MyCode);
- var classAttribute = (VersionAttribute)Attribute.GetCustomAttribute(info, typeof(VersionAttribute));
- Console.WriteLine(classAttribute.Name);
- Console.WriteLine(classAttribute.Date);
- Console.WriteLine(classAttribute.Describtion);
- }
- }
【3】AttributeUsageAttribute中的3个属性(Property)说明:
四.参考资料
【1】Msdn
【2】《你必须知道的.NET之特性和属性》,博主严重推荐!
【3】《Attribute在.net编程中的应用》系列文章
用指定的前缀来表示特性所应用的目标元素,建议这样来处理,因为显式处理可以消除可能带来的二义性。
【2】AttributeTargets目标包括:
2.Attribute:
Attribute的目标是:为元素提供附加信息。它的作用更类似于注释。
可以说,Property/Field和Attribute是两个完全不同的概念,虽然他们有些时候能做一样的事,但请记住,他们是从本质上就不同的两个东西。
三.实现自己的Attribute时需要注意的一些问题
1.自定义的Attribute必须直接或者间接继承System.Attribute。
2.这里有一个约定:所有自定义的特性名称都应该有个Attribute后缀。当编译器看到一个属性被附加到一个程序元素上时,它会搜索具有指定属性名的System.Attribute派生类。如果编译器没有找到匹配的类,它就在指定的属性名后面加上Attribute,然后再进行搜索。因此,常见的使用做法是将属性类名定义为以Attribute结尾,在使用时忽略名称的这一部分
下面是一些开发自定义Attribute时,可能需要用到的资料:
【1】Attribute可以关联的元素包括:
程序集(assembly)、模块(module)、类型(type)、属性(property)、事件(event)、字段(field)、方法(method)、参数(param)、返回值(return)。例如:
- [assembly: Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]
- public class MyCode
- {
- //......
- }
会出现编译错误。
2.Attribute作为编译指令
Attribute类是在编译的时候被实例化的,而不是像通常的类那样在运行时候才实例化。所以在第三段代码中,你可以在没有实例化MyCode对象的情况下取到MyCode的Attribute信息。由于Attribute类是在编译的时候被实例化的,所以你还可以用外部工具维护这些Attribute信息。
3.Attribute与Property
从中文来说,Attribute和Property的中文都叫“属性”,很容易让人混淆。现在的文章,Attribute一般翻译为”特性”,而Property称为“属性”。
或许你会问,我用静态的Property/Field一样可以做到在不实例化的时候拿到一些信息,如果这样的话,Attribute又有什么存在意义呢?
1.Property:
Property可以说是一个面向对象的概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。比如:
- public class Robot
- {
- private string name = ""; //字段:Field
- public string Name //属性:Property,对Field进行封装。
- {
- get { return name; }
- set { name = value; }
- }
- }
示例完毕!上面三段代码相信已经说明了Attribute大概是一个什么东西和怎么去用。
二.深入讨论Attribute
1.Attribute的概念定义
关于Attribute概念的定义,我直接引用《你必须知道的.NET之特性和属性》中的一段来说明:
MADN的定义为:公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据(metadata)保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
我们简单的总结为:定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息。
噢,原来Attribute的目的是为元素提供关联附加信息。其中,上面第一段代码中“[AttributeUsage(AttributeTargets.Class)] ”说明了Attribute提供附加信息的元素是Class,所以如果上面第二段的代码改为:
- public class MyCode
- {
- [Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]
- public void Test() { }
- }
3.上面这个Class中的Attribute一般会被如何使用呢?
2.使用自定义Attribute的Class:
- [Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]
- public class MyCode
- {
- //...
- }
总结:
Attribute是指为类附加的说明信息,与注释不同,这些说明信息是给机器看的,并能影响机器的执行,具体应用如下:
1.影响编译器,相当于条件编译
2.调用API函数时,要用Attribute申明是.Net Framework之外的函数
3.自定义Attribute,用于描述对应类或方法,也就是传说中.net是自我描述的功能
4.还是对机器说明这个类有什么用的,机器看到后就会采取相应的动作,
如[seriablae],[webservice],[TestFixture]
发表评论
-
向SqlCommand对象的ParameterCollections集合添加参数时犯的低级错误
2009-10-23 16:58 1496今天写代码遇到了一个小小的问题看来是基础不过关啊,嘿嘿. ... -
数字金额转为大写金额
2009-10-21 16:46 1261方法一: /// <summary> ... -
格式化文件大小的C#方法
2009-10-21 10:31 1811/// <summary> // ... -
String和StringBuilder的区别和使用
2009-08-11 10:22 1270String是固定不变的,在进行字符串连接的时候是新建一 ... -
C#值类型后面加问号表示可为空null(Nullable 结构)
2009-08-04 14:38 7973值类型后面加问号表示可为空null(Nullable 结构)N ... -
C# 替换去除HTML标记方法(正则表达式)
2009-07-31 11:02 8633using System.Text.RegularExpres ... -
C#里面比较时间大小三种方法
2009-07-29 12:55 12201。比较时间大小的实验 string str1 ... -
DataTime.Ticks
2009-07-29 07:30 4482java Date.getTime() getTime pub ... -
.net读取和写入txt文件
2009-07-21 23:34 7339//检查文件,如果文件不 ... -
Static方法
2009-07-19 23:28 8561.static方法是类中的一个成员方法,属于整个类,即使不用 ... -
C#中判断空字符串的3种方法性能分析
2009-07-02 08:47 12343种方法分别是: string a="&qu ... -
ASP.NET发布网站解决方案
2009-06-30 14:31 5355对于想了解发布网站那 ... -
C#中@的用法
2009-06-28 06:13 8621. 加在字符串前面,字符串中的 \ 失去转义符的作用,直接 ... -
c# cs 生成dll
2009-06-25 23:00 2350C# 语言是一种简单但功 ... -
C#项目引用完全相同dll文件的问题解决方法(反射)
2009-06-25 19:52 7213今天有开发人员问我一个问题,他的项目中要引用两个类库,这两 ... -
ADO.NET事务
2009-06-23 14:07 977private void DemoTranscation() ... -
null,"",String.Empty的区别
2009-06-16 16:37 11671.null null 关键字是表示不引用任何对象的空引用 ... -
C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
2009-06-13 14:56 10921.C#类和接口的区别 ... -
Asp.net日期格式
2009-06-06 18:37 1282DateTime dt = DateTime.Now; ... -
GUID介绍
2009-05-22 08:56 1600GUID(全局统一标识符) ...
相关推荐
通过以上步骤,我们可以看到,C#中的自定义属性结合`PropertyGrid`控件,可以极大地提高代码的可读性和用户体验。在实际开发中,根据项目需求,可以进一步扩展自定义属性的功能,如添加数据验证、格式化显示等,以...
"Property和Attribute的区别" 在面向对象编程(Object-Oriented Programming)中,Property和Attribute都是常用的概念,但是它们之间存在着本质的区别。Property是指类向外提供的数据区域,是智能的字段,其中有get...
在C#编程中,`property`和`attribute`是两个重要的概念,它们各自有特定的用途,理解并熟练掌握它们对于编写高效、可维护的代码至关重要。 首先,我们来看`property`。在C#中,`property`是一种封装机制,它提供了...
本文实例分析了C#中Property和Attribute的区别。分享给大家供大家参考。具体分析如下: 在C#中有两个属性,分别为Property和Attribute,两个的中文意思都有特性、属性之间,但是用法上却不一样,为了区别,本文暂把...
在C#编程中,`PropertyGrid`控件是一个强大的工具,用于显示和编辑对象的属性。它自动将对象的公共属性、字段和枚举值显示为网格形式,方便用户进行交互。然而,当处理复杂类型的数据,如集合或自定义类时,`...
在C#编程中,`PropertyGrid`控件通常用于显示对象的属性,并允许用户进行交互式编辑。在一些特殊情况下,我们可能需要手动动态地添加数据行到`PropertyGrid`而不是通过属性绑定来实现。本篇文章将深入探讨如何在不...
在C#中,PropertyGrid常用于基于Attribute的开发。Attribute是一种元数据,可以附加到程序元素(如类、方法、属性等)上,提供额外的信息,这些信息可以在运行时被反射机制读取。PropertyGrid通过反射机制获取并显示...
本篇文章将深入探讨如何使用C#自定义`PropertyGrid`,包括自定义属性和显示顺序。 首先,`PropertyGrid`通过反射机制动态地获取并显示对象的公共属性。然而,有时我们需要对显示的属性进行控制,例如隐藏某些属性、...
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property)] public class UnityInjectionAttribute : Attribute { public Type ObjectType { get; set; } public UnityInjectionAttribute(Type ...
在C#编程中,`PropertyGrid`控件提供了简洁的方式来进行数据绑定和自定义属性显示。本篇文章将深入探讨如何在运行时给`PropertyGrid`动态添加属性。 首先,理解`PropertyGrid`的工作原理是关键。`PropertyGrid`通过...
Attribute与Property的区别 虽然在中文里“属性”这个词有时会被用来同时指代Property和Attribute,但实际上两者有着本质的不同: - **Property** 是一种特殊的.NET成员,它允许以类似字段的方式访问对象的数据,...
在C#编程中,`PropertyGrid`控件是一个强大的工具,用于显示和编辑对象的属性。它通常用于创建用户友好的界面,使开发者能够轻松地查看和修改对象的属性值。这个范例将向我们展示如何扩展`PropertyGrid`的功能,以...
本篇将深入探讨如何在C#中使用`PropertyGrid`动态加载自定义属性,以实现更灵活的数据展示和编辑功能。 首先,我们要理解`PropertyGrid`的基本用法。`PropertyGrid`控件通过反射机制自动发现并显示对象的所有公共...
本文主要给大家介绍了关于C#基础之Attribute和反射的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 Attribute(特性) Attribute是C#的一种语言特性,用于为各种实体(class,field,...
1. **数据绑定**:`PropertyGrid`可以通过`DataSource`属性与任何支持`ITypeDescriptorContext`接口的对象进行数据绑定。你可以将自定义类实例传递给它,这样`PropertyGrid`就会自动列出类中所有公开的属性。 2. **...
C#中的特性(Attribute)可以用来控制`PropertyGrid`中属性的显示方式。例如: - `DisplayNameAttribute`:改变属性的显示名称。 - `DescriptionAttribute`:提供属性的描述信息,会在属性下方以小字显示。 - `...
在C#中,我们使用`[Attribute]`语法来应用一个Attribute实例到我们的代码元素上。 二、创建自定义Attribute 要创建自定义Attribute,我们需要继承自`System.Attribute`基类,并定义所需的属性和方法。例如,我们...
程序集,模块,类型(类,结构,枚举,接口,委托),字段,方法(含构造),方法,参数,方法返回值,属性(property),Attribute [AttributeUsage(AttributeTargets.All)] public class TestAttribute : ...