仓酷云

标题: ASP.NET教程之[你必需晓得的.NET] 第三回:汗青纠葛:特征和属性仓酷云 [打印本页]

作者: 深爱那片海    时间: 2015-1-18 11:25
标题: ASP.NET教程之[你必需晓得的.NET] 第三回:汗青纠葛:特征和属性仓酷云
你觉得数据库怎么样?系列文章目次索引:《你必需晓得的.NET
本文将先容以下内容:

•定制特征的基础观点和用法
•属性与特征的区分对照
•反射的复杂先容
1.弁言
attribute是.NET框架引进的有一手艺亮点,因而我们有需要花点工夫来懂得本文的内容,走进一个发明attribute登堂进室的出口。由于.NETFramework中利用了大批的定制特征来完成代码商定,[Serializable]、[Flags]、[DllImport]、[AttributeUsage]这些的机关,信任我们都见过吧,那末你是不是懂得其面前的手艺。
提起特征,因为初级言语开展的汗青缘故原由,难免让人想起另外一个耳熟能详的名字:属性。特征和属性,常常给初学者大概从C++转移到C#的人搅浑的观点打击。那末,甚么是属性,甚么是特征,两者的观点和区分,用法与示例,将在本文做以归纳综合性的总结和对照,但愿给你的了解带来劳绩。别的本文的主题以特征的先容为主,属性的叙述重点凸起在两者的对照上,关于属性的更多叙述将在另外一篇主题中具体会商,敬请存眷。
2.观点引进
2.1.甚么是特征?
MADN的界说为:大众言语运转时同意增加相似关头字的形貌声明,叫做attributes,它对程序中的元素举行标注,如范例、字段、办法和属性等。Attributes和Microsoft.NETFramework文件的元数据保留在一同,能够用来向运转时形貌你的代码,大概在程序运转的时分影呼应用程序的举动。
我们复杂的总结为:定制特征attribute,实质上是一个类,其为方针元素供应联系关系附加信息,并在运转期以反射的体例来猎取附加信息。详细的特征完成办法,在接上去的会商中持续深切。
2.2.甚么是属性?
属性是面向对象编程的基础观点,供应了对公有字段的会见封装,在C#中以get和set会见器办法完成对可读可写属性的操纵,供应了平安和天真的数据会见封装。关于属性的观点,不是本文的重点,并且信任年夜部分的手艺职员应当对属性有明晰的观点。以下是复杂的属性示例:

publicclassMyProperty
{
//界说字段
privatestring_name;
privateint_age;

//界说属性,完成对_name字段的封装
publicstringName
{
get{return(_name==null)?string.Empty:_name;}
set{_name=value;}
}

//界说属性,完成对_age字段的封装
//到场对字段的局限把持
publicintAge
{
get{return_age;}
set
{
if((value>0)&&(value<150))
{
_age=value;
}
else
{
thrownewException("Notarealage");
}
}
}
}

publicclassMyTest
{
publicstaticvoidMain(string[]args)
{
MyPropertymyProperty=newMyProperty();
//触发set会见器
myProperty.Name="Anytao";
//触发get会见器
Console.WriteLine(myProperty.Name);
myProperty.Age=66;
Console.WriteLine(myProperty.Age.ToString());
Console.ReadLine();
}
}
2.3.区分与对照
经由过程对观点的廓清和汗青的回溯,我们晓得特征和属性只是在称号上有过纠葛,在MSDN上关于attribute的中文注释乃至仍是属性,可是我批准更一般的称号:特征。在功效上和使用上,两者实在没有太多含混的观点交织,因而也没有需要来对照其使用的异同点。本文则以特征的观点为重点,来会商其使用的场所和划定规矩。
我了解的定制特征,就是为方针元素,能够是数据集、模块、类、属性、办法、乃至函数参数等到场附加信息,相似于正文,可是能够在运转期以反射的体例取得。定制特征次要使用在序列化、编译器指令、计划形式等方面。
3.通用划定规矩
4.特征的使用
4.1.经常使用特征
经常使用特征,也就是.NET已供应的固有特征,现实上在.NET框架中已供应了丰厚的固有特征由我们发扬,以下精选出我以为最经常使用、最典范的固有特征做以复杂会商,固然这只是我的一家之言,亦不敷道。我想懂得特征,仍是从这里做为出发点,从.NET供应的典范入手下手,也许是一种求知的捷径,但愿能给人人以启发。
另有其他的主要特征,包含:DescriptionDefaultValueCategoryReadOnlyBrowerAble等,偶然间能够深切研讨。
4.2.自界说特征
既然attribute,实质上就是一个类,那末我们就能够自界说更特定的attribute来满意本性化请求,只需恪守上述的12条划定规矩,完成一个自界说特征实际上是很简单的,典范的完成办法为:
5.典范示例

5.1小菜一碟
啥也不说了,看正文吧。
usingSystem;
usingSystem.Reflection;//使用反射手艺取得特征信息

namespaceAnytao.net
{
//定制特征也能够使用在其他定制特征上,
//使用AttributeUsage,来把持怎样使用新界说的特征
[AttributeUsageAttribute(AttributeTargets.All,//可使用任何元素
AllowMultiple=true,//同意使用屡次
Inherited=false)]//不承继到派生类
//特征也是一个类,
//必需承继自System.Attribute类,
//定名标准为:"类名"+Attribute。
publicclassMyselfAttribute:System.Attribute
{
//界说字段
privatestring_name;
privateint_age;
privatestring_memo;

//必需界说其机关函数,假如不界说有编译器供应无参默许机关函数
publicMyselfAttribute()
{
}
publicMyselfAttribute(stringname,intage)
{
_name=name;
_age=age;
}

//界说属性
//明显特征和属性不是一回事儿
publicstringName
{
get{return_name==null?string.Empty:_name;}
}

publicintAge
{
get{return_age;}
}

publicstringMemo
{
get{return_memo;}
set{_memo=value;}
}

//界说办法
publicvoidShowName()
{
Console.WriteLine("Hello,{0}",_name==null?"world.":_name);
}
}

//使用自界说特征
//能够以Myself大概MyselfAttribute作为特征名
//能够给属性Memo赋值
[Myself("Emma",25,Memo="Emmaismygoodgirl.")]
publicclassMytest
{
publicvoidSayHello()
{
Console.WriteLine("Hello,my.networld.");
}
}

publicclassMyrun
{
publicstaticvoidMain(string[]args)
{
//怎样以反射断定特征信息
Typetp=typeof(Mytest);
MemberInfoinfo=tp;
MyselfAttributemyAttribute=
(MyselfAttribute)Attribute.GetCustomAttribute(info,typeof(MyselfAttribute));
if(myAttribute!=null)
{
//嘿嘿,在运转时检察正文内容,是否是很爽
Console.WriteLine("Name:{0}",myAttribute.Name);
Console.WriteLine("Age:{0}",myAttribute.Age);
Console.WriteLine("Memoof{0}is{1}",myAttribute.Name,myAttribute.Memo);
myAttribute.ShowName();
}

//多点反射
objectobj=Activator.CreateInstance(typeof(Mytest));

MethodInfomi=tp.GetMethod("SayHello");
mi.Invoke(obj,null);
Console.ReadLine();
}
}
}啥也别想了,本人做一下尝尝。
5.2参考之资

6.结论
Attribute是.NET引进的一年夜特征手艺,但在博客园中会商的不是良多,以是拿出本人的体味来分享,但愿就这一手艺要点举行一番登堂进室的引诱。更深条理的使用,比方序列化、程序平安性、计划形式多方面都能够发掘出闪灼的金子,这就是.NET在手艺范畴带来的百变魅力吧。但愿人人各抒己见,来完美和增补作者在这方面的不周全和认知上的不深切,那将是作者最年夜的勉励和动力。
ASP.NET教程之[你必需晓得的.NET] 第三回:汗青纠葛:特征和属性仓酷云
登录/注册后可看大图

<br>
参考文献
(USA)StanleyB.Lippman,C#Primer

作者: 老尸    时间: 2015-1-21 05:38
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
作者: 小妖女    时间: 2015-1-30 08:52
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
作者: 乐观    时间: 2015-2-6 09:16
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
作者: 简单生活    时间: 2015-2-6 13:53
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
作者: 活着的死人    时间: 2015-2-16 08:45
逐步缩小出错代码段的范围,最终确定错误代码的位置。
作者: 分手快乐    时间: 2015-2-25 00:31
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
作者: 深爱那片海    时间: 2015-3-7 09:38
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
作者: 仓酷云    时间: 2015-3-14 17:25
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者: 第二个灵魂    时间: 2015-3-21 12:23
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2