Attribute的中文意思是属性,它是一种类。也被称为类的属性成员。它与我们用的字段成员(也就是在C++中的数据成员)不同的是:访问字段成员实际上是对变量的访问,而属性成员在类的对象中是不以变量的形式出现的,它是函数成员的一种。虽然可以象操作变量一样操作一个属性成员,但是在属性成员内部需要向外界提供某个表达式的值,或者接受外界 的值以便修改某个字段成员。我们一般可以这么使用Attribute: class Circle { protected int nColor; public int Color { get { return nColor; } set { nColor=value; } } } 这样可以很好的保证类的封闭性。我们可以通过共有的函数来访问类中的私有或保护的数据成员。
To zero8223:关于C#中的Attribute,您可以参考MSDN中的"Extending Metadata Using Attributes"。这篇文章讲的非常详细,而且附带了大量的例子代码并有说明,其中还以一个DeveloperAttribute为例讲述了如何自定义Attribute和如何使用自定义的Attribute。其实,Attribute并不是C#中的一个新概念,以前在VC++中已经有了。如果对VC++中的Attribute有兴趣,可以参考MSDN中"Attributed Programming"一文,地址是http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcwlkCustomAttributesTutorial.asp另外,关于cnnjyeziyin提到的内容,有三个名词在C#中是容易产生迷惑的:Fields, Attributes, Properties。这三个名词的中文翻译都称作“属性”,但还是有所区分的:[Serializable] //Attributes class Circle{ int _radius; //Fields int radius{ get{ return _radius; } set{ if(value>=0) _radius=value;} } //Properties } Hogwarts - S(u)ddenly dis@ppeared... - 本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。 为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
补充一下,上面提到的MSDN中讲述C#中的Attribute的文章"Extending Metadata Using Attributes"的地址是http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconextendingmetadatausingattributes.asp Hogwarts - S(u)ddenly dis@ppeared... - 本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
比如在创建一个web service时,加上[WebMethod],运行时就知道他是一个web service,因为会爆露并输出这个web service.
其实这根以往的语言的函数修饰符和编译器选项大同小异,不同的是DOTNET是在运行时搞掂的,以往是在编译时搞掂的。
比如我定义了 [FuckMethod]
public void Fuck()
{
Console.Writeln("Fuck~~~");
}
那么这个属性有什么用吗?能帮助我干什么呢?是不是和注释一样?
注释是给人看得,而属性是给机器看得???
请赐教!
Attribute基本上是一个应用于代码中某个项目(例如方法和类)的标记,或者是方法的一个参数,它提供了该项目的额外信息。
要给一个项目应用Attribute,应在该项目定义前面的方括号中提供Attribute名。某些Attribute带有参数,这些参数应紧放在Attribute名后面的圆括号中。
从基本的一层来看,把Attribute应用到项目上,就是把该项目的额外信息放在编译好的装配件中,在这个装配件中,这些额外信息可以用在文档说明中作解释性的工作(使用反射的技术,也可以编写C#代码访问这些信息)。自己定制的任何Attribute都可以这么做。但是,在基类中定义的许多Attribute都要由C#编译器显式标识。编译器会对这些Attribute执行某些操作,这些操作可能影响到生成的代码,
定制Attribute
Attribute的结构也允许用户在源代码中定义自己的Attribute。显然,如果这么做,这些Attribute就不会影响编译过程,因为编译器不能识别它们,但这些Attribute可以在它编译好的装配件中用作元数据,这些元数据在文档说明中非常有用。但是,把这个想法付诸实践的是使用System.Reflection名称空间中的类,代码可以在运行时读取这些元数据,即定制Attribute可以直接影响代码运行的方式。
如果应用程序读写数据到数据库中,就可以使用定制Attribute,把了和属性标记为对应的数据库表和列。然后在运行是从装配件中读取这些Attribute,是程序可以自动从数据库的相应位置检索和写入数据,无需为每个表或列编写特定的逻辑。以上文字引自《C#高级编程》一书。我正在写一篇Attribute的使用,还没完成,如果大家有兴趣的话,敬请关注。
你使用了一个FuckMethod,就表明你一定是定义了FuckMethodAttribute类,那个利用System.Reflection名字空间里的类,你可以在运行时间取得这个类实例,那么就可以根据这个FuckMethodAttribute类实例做出某些你需要的动作。说得够简单了吧?
class Circle
{
protected int nColor;
public int Color
{
get
{
return nColor;
}
set
{
nColor=value;
}
}
}
这样可以很好的保证类的封闭性。我们可以通过共有的函数来访问类中的私有或保护的数据成员。
class Circle{
int _radius; //Fields int radius{
get{ return _radius; }
set{ if(value>=0) _radius=value;}
} //Properties
}
Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。