当前位置: 首页 > news >正文

网站架构 规划建站公司新闻资讯

网站架构 规划,建站公司新闻资讯,渭南建网站,wordpress集成幻灯前言最近成功把「前端带师」带入C#的坑#xff08;实际是前端带师开始从cocos转unity游戏开发了#xff09;某天#xff0c;「前端带师」看到这段代码后问了个问题#xff1a;[这个是装饰器]#xff1f;[HttpGet] public Response Get() {return ... }我第一反应觉得不是实际是前端带师开始从cocos转unity游戏开发了某天「前端带师」看到这段代码后问了个问题[这个是装饰器][HttpGet] public Response Get() {return ... }我第一反应觉得不是这玩意在C#中叫“特性”英文名Attribute下文统称为特性在Java中叫注解虽然写法和Python/TypeScript中的差不多但印象中实现方式应该是不同的。但咱学理工科的就是要严谨不能仅凭经验和感觉为此我查了一下资料看了之前杨旭大佬推荐的《C# in nutshell》这本书不仅确认了这个问题的答案也对Attribute有了更多了解。关于AOP“特性”、装饰器其实都是设计模式中的装饰器模式同时也是AOP思想。AOP是Aspect Oriented Programming即面向切面编程。AOP把系统分解为不同的关注点或者称之为切面Aspect是一种在运行时动态地将代码切入到类的指定方法、指定位置上的编程思想比如现在有一个网站有购物、社交、游戏等多种功能且对所有用户开放现在需要限制只有高级会员才能使用其中的几个功能我们可以在每个模块加上if判断但这样侵入性太强且会造成大量重复代码换成AOP的方法就是使用装饰器在需要高级会员的地方加上限制就行~具体的区别先来看看语法上的不同Python的装饰器先来看看Python中的装饰器在Python中函数是一等公民装饰器也是个函数其内部又内嵌了另一个函数def outer(func):def inner():# ... 一些代码result  func()return resultreturn inner使用的时候outer def test():print(test)使用时语法和Java的注解一样以开头其实这是个语法糖实际的效果等同于outer(test)将test函数作为参数传入给装饰器之后这段代码的执行顺序如下def outer(func)装饰器定义outer装饰器语法糖直接直接执行outer函数将test函数作为参数传入outer执行装饰器语法规则将test函数替换成inner函数inner执行inner函数代码test根据inner中的这行代码result func()执行test函数代码返回在Python这种动态语言中实现装饰器模式确实是比静态语言容易的被装饰的内容作为参数传入装饰器装饰器可以直接访问到被装饰的内容进行一些处理。C#的“特性”C#中“特性”是一个类继承自Attribute类然后可以包含任意你想要的属性字段用AttributeUsage特性修饰可以指定该特性可以修饰哪些代码元素[AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple  true)] public class DemoAttribute : Attribute {public DemoAttribute(string param1) {this.param1  param1;}public string param1 { get; set; } }构造方法中的参数就是使用特性时传入的参数比如这样[DemoAttribute(class)] public class DemoClass {[Demo(method)]public void Method1() {} }PS特性使用时可以省略后面的Attribute所以DemoAttribute和Demo是同个东西这样写了之后并不会产生什么效果因为特性只是单纯的装饰在代码运行的时候C#编译器先实例化DemoAttribute这个类然后再实例化DemoClass这个类且在DemoAttribute内是无法获取到被装饰的内容的。为了使装饰起效果需要搭配使用反射~反射指程序可以访问、检测和修改它本身状态或行为的一种能力。通过下面的代码可以获取到装饰在DemoClass上的特性var info  typeof(DemoClass); var attributes  info.GetCustomAttributes(true);通过下面的代码可以获取被装饰的方法和装饰参数啥的foreach (var methodInfo in typeof(DemoClass).GetMethods()) {var attribute  (DemoAttribute) Attribute.GetCustomAttribute(methodInfo, typeof(DemoAttribute));if (attribute ! null)Console.WriteLine(方法 {0} 被装饰装饰参数 {1}, methodInfo.Name, attribute.param1); }获取到这些信息后通过反射提供的其他功能再进行一些处理也就实现了所谓的AOP小结所以C#的特性和Python/TypeScript中的装饰器虽然写法用法不一样但殊途同归要实现的目的确实是差不多的。但要说是同样的东西又不严谨所以应该同样的东西不过都是各自语言中实现AOP的方式。参考资料C#的Attribute和Typescript的装饰器之比较https://blog.csdn.net/weixin_43263355/article/details/110137016C#中如何实现类似Python中的装饰器https://www.zhihu.com/question/36211661AOP面向切面编程https://bbs.huaweicloud.com/blogs/289045
http://www.huolong8.cn/news/61026/

相关文章:

  • 华亭县建设局网站2017免费企业网站cms系统
  • 青岛建网站公司哪家专业网站建设项目报价
  • 手机网站设计神器社群营销
  • oppo软件商店安装360优化大师app
  • 设计网站logo做视频网站怎么赚钱
  • 企业网站用什么数据库比较好的做展会邀请函的网站
  • 关闭网站需要多久做网站的目的与意义
  • 北京网站开发培训直播软件app开发制作
  • 凡科建站案例电商线上推广渠道
  • 深圳东莞网站建设wordpress国人cms
  • 网站后台是什么广告设计主要做什么
  • 手机网站生成代码wordpress标签云修改
  • 佛山新网站建设渠道企业seo顾问服务
  • 做网站备案不少天宜兴百度推广公司
  • 快速的网站开发工具自己写的网站怎么发布
  • 电子商务项目策划书百度自动优化
  • 做任务的网站做的比较好的电商网站
  • 衡水企业网站白云区网站建设公
  • 安徽省工程建设协会网站南阳市建网站公
  • 微网站制作电话网站优化师负责干什么
  • 彩票网站开发合法吗外贸网站建设深圳
  • 北京南站是丰台站吗长春是几线城市2020
  • 网站设计制作都有哪些福州短视频seo程序
  • vue做门户网站用什么ui杭州优化外包
  • 上海网站定制设计镇江网站建设制作企业
  • 网站开发选定制还是模板网站备案没有了
  • 网站建设 蔬菜配送网站建设淮安
  • 建设科技网络网站的意义和目的郑州建站系统费用
  • 国外教育网站模板名师工作室建设网站
  • 菏泽网站建设多少钱企业公司网站建设方案