C#中的特性基本理解

C#中的特性基本理解

2023年6月20日发(作者:)

C#中的特性基本理解定制特性可以应⽤的⽬标元素可以为:程序集(assembly)、模块(module)、类型(type)、属性(property)、事件(event)、字段(field)、⽅法(method)、参数(param)、返回值(return)定制特性以[,]形式展现,放在紧挨着的元素上,多个特性可以应⽤于同⼀元素,特性间以逗号隔开,以下表达规则有效:[AttributeUsage][ Flags]、[AttributeUsage, Flags]、[Flags, AttibuteUsageAttribute]、[AttributeUsage(), FlagesAttribute()]attibute实例,是在编译期进⾏初始化,⽽不是运⾏的时候。定制特性类型,必须直接或者间接的继承⾃ute类,⽽且该类型必须有公有构造函数来创建其实例。所有⾃定义的特性名称都应该有个Attribute后缀,这是习惯性约定。定制特性也可以应⽤在其他定制特性上,这点也很好理解,因为定制特性本⾝也是⼀个类,遵守类的公有规则。例如很多时候我们的⾃定义定制特性会应⽤AttributeUsageAttribute特性,来控制如何应⽤新定义的特性。

[AttributeUsageAttribute(),[AttributeUsageAttribute(),AllowMultiple = true,

Inherited = true]class MyNewAttribute: ute{//}定制特性不会影响应⽤元素的任何功能,只是约定了该元素具有的特质。所有⾮抽象特性必须具有public访问限制。定制特性常⽤于在运⾏期获得代码注释信息,以附加信息来优化调试。定制特性可以应⽤在某些设计模式中,如⼯⼚模式。定制特性还常⽤于位标记,⾮托管函数标记、⽅法废弃标记等其他⽅⾯。

特性能⼲嘛1)功能性信息:如[Serializable]加在类前表⽰该类可被串⾏化。[Serializable]public class HumanProperty2)提⽰性信息:如[Obsolete]表⽰该⽅法已经过时,提醒程序员使⽤新的替代函数。[Obsolete("Use another method : Average(), instead!", true)]public virtual void CalcAverage(int speed)3)限定性信息:如[Conditional("DEBUG")]表⽰下⾯的⽅法只有在调试模式下才有效。[Conditional("DEBUG")]public void UnitTest()4)描述性信息:如[Description]对所指对象进⾏详细描述。public enum CreditCardType{  [Description("Unknown")]  Unknown,  [Description("Corp Card")]  CC}

可以定义⼀个特性⽤来验证⽤户是否登录 ///

/// ⽤户登陆的过滤器,没有登陆的⽤户将跳到/User/Login页⾯ /// [AttributeUsage( | , AllowMultiple = false, Inherited = true)] public sealed class LoginAuthorizeAttribute : ActionFilterAttribute//ActionFilterAttribute是MVC中定义的⼀个特性 { //对ActionFilterAttribute特性中的⽅法进⾏重写 public override void OnActionExecuting(ActionExecutingContext filterContext) { ///fo ///ViewsHelper是⼀个静态类,⽤来存放⼀些全局的数据,登录数据,⽤户信息等 ///userInfo是ViewsHelper中的⽤户登录数据 if (fo == null) { //发现没有⽤户登录信息设置重定向地址和参数 = new RedirectResult( ("/UserInfo/Login" , "?returnUrl=" , tContext .HttpContext .Server .UrlEncode(dQuery))); } else { var model = inSession(); if (model != null) { if (nID != nID) { (); = new RedirectResult( ("/UserInfo/Login" , "?tag=1&time=" + ng("HH:mm:dd") + "&returnUrl=" , tContext .HttpContext .Server .UrlEncode(dQuery))); } } } onExecuting(filterContext); } }可以对类或者属性等等,添加描述信息 public enum AdvertisementType { [Description("视频")] Video = 1, [Description("图⽚")] Image = 2 }然后就可以通过反射来获取到每个枚举中定义的Description("视频") 属性

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687249387a7.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信