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

找别人做网站的注意事项外贸开发产品网站模板

找别人做网站的注意事项,外贸开发产品网站模板,学做网网站论坛,苏州网站小程序app开发公司这篇文章主要讲一下C#里面Attribute的使用方法及其可能的应用场景。 比如你把玩家的血量、攻击、防御等属性写到枚举里面。然后界面可能有很多地方要根据这个枚举获取属性的描述文本。 比如你做网络框架的时候#xff0c;一个协议号对应一个类的处理或者一个方法。 比如你做…这篇文章主要讲一下C#里面Attribute的使用方法及其可能的应用场景。 比如你把玩家的血量、攻击、防御等属性写到枚举里面。然后界面可能有很多地方要根据这个枚举获取属性的描述文本。 比如你做网络框架的时候一个协议号对应一个类的处理或者一个方法。 比如你做ORM一个类的属性是否映射持久化文件中的属性映射过去的属性名是什么。 1、什么是Attribute 如果用过Java的Annotation的同学可以把Attribute当成Annotation来看待。 还不了解Attribute的同学不用急我们看一下官方的解释 The Attribute class associates predefined system information or user-defined custom information with a target element. A target element can be an assembly, class, constructor, delegate, enum, event, field, interface, method, portable executable file module, parameter, property, return value, struct, or another attribute. Information provided by an attribute is also known as metadata. Metadata can be examined at run time by your application to control how your program processes data, or before run time by external tools to control how your application itself is processed or maintained. For example, the .NET Framework predefines and uses attribute types to control run-time behavior, and some programming languages use attribute types to represent language features not directly supported by the .NET Framework common type system. All attribute types derive directly or indirectly from the Attribute class. Attributes can be applied to any target element; multiple attributes can be applied to the same target element; and attributes can be inherited by an element derived from a target element. Use the AttributeTargets class to specify the target element to which the attribute is applied. The Attribute class provides convenient methods to retrieve and test custom attributes. For more information about using attributes, see Applying Attributes and Extending Metadata Using Attributes. 翻译过来就是 Attribute类可以把目标元素和一个预定义的信息或者是用户自定义信息关联起来。这里的目标元素可以是assemblyclassconstructordelegateenumeventfieldinterfacemethod可执行文件模块parameterpropertyreturn valuestruct或其它的Attribute。 Attribute提供的信息也被称为元数据metadata。元数据能用于在运行时控制怎样访问你的程序数据或者在运行前通过额外的工具来控制怎样处理你的程序或部署它。例如.NET Framework预定义并使用attribute去控制运行时行为一些编程语言使用attribute类型来描述.NET Framework中通用类型不直接支持的语言特性。 所有的Attribute类型直接或间接从Attribute类继承。Attribute能应用到任何target元素多个Attribute能应用到相同的元素 Attribute类提供遍历的方法去取出和测试自定义Attribute。更多关于Attribute的信息可以看Applying Attributes和Extending Metadata Using Attributes。 如果你看了官方的解释不明白看了我的翻译也不明白。也没事。。。我们接下来举个例子看看Attribute能做啥。 2、用Attribute将枚举和一个描述文本绑定在一起 假设有这个枚举 [csharp] view plain copy public enum Properties  {      /// summary      /// 血量      /// /summary      HP  1,        /// summary      /// 物理攻击      /// /summary      PhyAtk  2,        /// summary      /// 物理防御      /// /summary      PhyDef  3,        /// summary      /// 法术攻击      /// /summary      MagAtk  4,        /// summary      /// 法术防御      /// /summary      MagDef  5  }   注意如果含中文的代码编译报“Newline in constant”的错。那么请将文件的编码保存为“带BOM的UTF-8”。VS中可以在“文件”-“高级保存选项”然后选择编码下拉中选择。 然后你现在想要根据枚举来获得中文描述比如传入 Properties.MagDef返回“法术防御”。 最原始的做法 [csharp] view plain copy public class PropertiesUtils  {      public static string GetDescByProperties(Properties p)      {          switch (p)          {              case Properties.HP:                  return 血量;              case Properties.PhyAtk:                  return 物理攻击;              case Properties.PhyDef:                  return 物理防御;              case Properties.MagAtk:                  return 法术攻击;              case Properties.MagDef:                  return 法术防御;              default:                  return 未知属性:  p;          }      }  }  这样确实可以解决问题但是我们可以用Attribute来做的更好。可以做的更好干嘛不呢 先定义一个用于存储描述文本的Attribute。[csharp] view plain copy [System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Enum)]  public class PropertiesDesc : System.Attribute  {      public string Desc { get; private set; }    }   没错看起来是不是觉得很简单。   然后我们就可以把上面定义的PropertiesDesc加到Properties上面像这样 [csharp] view plain copy public enum Properties  {        [PropertiesDesc(血量)]      HP  1,        [PropertiesDesc(物理攻击)]      PhyAtk  2,        [PropertiesDesc(物理防御)]      PhyDef  3,        [PropertiesDesc(法术攻击)]      MagAtk  4,        [PropertiesDesc(法术防御)]      MagDef  5  }   OK。这样我们相当于就把一个文本描述信息通过Attribute关联到我们的枚举属性了。 那么怎样获取我们来重写之前的PropertiesUtils类。 [csharp] view plain copy public class PropertiesUtils  {      public static string GetDescByProperties(Properties p)      {          Type type  p.GetType();          FieldInfo[] fields  type.GetFields();          foreach (FieldInfo field in fields)          {              if (field.Name.Equals(p.ToString()))              {                  object[] objs  field.GetCustomAttributes(typeof(PropertiesDesc), true);                  if (objs ! null  objs.Length  0)                  {                      return ((PropertiesDesc)objs[0]).Desc;                  }                  else                  {                      return p.ToString()  没有附加PropertiesDesc信息;                  }              }          }          return No Such field : p;      }  }   可以看到。这里面已经不用自己去判断哪个枚举值返回哪个字符串描述了。而是获取这个枚举域的PropertiesDesc对象。然后返回它的Desc属性。 当然你还可以把上面的代码改成通用的把Properties改成一个Type这样就可以处理所有的枚举。然后还可以在查找PropertiesDesc的位置增加一个缓存。根据Type和字段的Name做缓存。改完后代码如下 [csharp] view plain copy public class PropertiesUtils  {      private  static DictionaryType, Dictionarystring, string cache  new DictionaryType, Dictionarystring, string();        public static string GetDescByProperties(object p)      {          var type  p.GetType();          if (!cache.ContainsKey(type))          {              Cache(type);          }          var fieldNameToDesc  cache[type];          var fieldName  p.ToString();          return fieldNameToDesc.ContainsKey(fieldName) ? fieldNameToDesc[fieldName] : string.Format(Can not found such desc for field {0} in type {1}, fieldName, type.Name);      }        private static void Cache(Type type)      {          var dict  new Dictionarystring, string();          cache.Add(type, dict);          var fields  type.GetFields();          foreach (var field in fields)          {              var objs  field.GetCustomAttributes(typeof(PropertiesDesc), true);              if (objs.Length  0)              {                  dict.Add(field.Name, ((PropertiesDesc)objs[0]).Desc);              }          }      }  }   3、还能干什么 Attribute能干的事情太多了比如你写了个类想做ORM映射里面有些字段不想映射到表有些想映射到表。有些字段可能名字和表的字段不一样。这时候你就可以通过Attribute来标识哪个字段需要被映射映射到数据库哪个字段。等等。 做过网络框架的同学也应该比较熟悉的一个应用使用Attribute来做自动的消息派发。 总之Attribute可以做很多自动化的事情就看你怎么用了。
http://wiki.neutronadmin.com/news/18888/

相关文章:

  • 做机械外贸什么网站好泰安房产网网上交易中心
  • 手机app ui设计在线网站网站在线帮助如何设计
  • 付费网站怎么做小企业网站建设和管理
  • 海宁做网站iis wordpress index.php
  • 网站建设方案平台架构优良的网站邮箱服务器提供商isp
  • 世界杯哪个网站做代理调用wordpress相关文章
  • 3g医院网站模板如何成立一个网站
  • 如何搭建一个公司网站seo中文全称是什么
  • 网站备案 99网站建设和前端开发的区别
  • 珠宝商城网站模板免费下载评析网站建设报价单
  • 如何做贷款网站网站建设公司的商业模式
  • 可以在线编程的网站国家企业信用信息公示网官网查询
  • 表格布局的网站网站没备案怎么做淘宝客
  • 重庆seo网站建设优化网站建设项目管理论文
  • 大屏手机网站代运营公司哪里有
  • 投票网站设计网站建设app开发 微信小程序 网站开发 自动脚本
  • 线上运营怎么做台州百度搜索优化
  • 网站建设项目中标通知wordpress播放器源码
  • 响应式网站设计企业seo快速整站上排名教程
  • 建德网站建设德品牌网西乡移动网站建设
  • 300个吉祥公司取名大全搜索引擎优化seo网站
  • 做网站收费标网站ip访问做图表
  • 做短租有哪些网站给你一个网站你怎么做
  • 北京网站设计网站设计公司价格云南省建设厅网站怎么进不去
  • 购物网站支付功能怎么做深圳网站建设raygf
  • 杭州微信建站沈阳网站优化推广方案
  • 麻章网站建设公司wordpress wp-json
  • 智库建设网站婚纱影楼网站免费源码
  • 建设英文网站的公司建设企业网站综合考虑
  • 佛山市公司网站建设哪家好免费做请帖的网站