C#自定义特性(Attribute)

  • C#容易混淆的几个单词:Parameter,Property,Attribute
  • Parameter 实参(方法括号里的参数)
  • Attribute 特性(类成员上面的标注(类似于注释,编译器能看到,可以在运行时以反射的方式获得,外挂,元数据)
  • Property 属性(实体类有很多属性)
  • 该博客例子解读:自定义了VersionAttribute特性并继承了Attribute,里面有几个属性。MyCode上展示该特性的使用。然后在控制台中取出。
  • 自定义的Attribute特性,必须直接或间接继承System.Attribute
  • 自定义的Attribute特性,名称最后都应该有个Attribute后缀。使用时却是Version(不用写Attribute)。
  • 一个进程中可以包含多个应用程序域,一个应用程序域可以装载一个可执行程序(.exe)或者多个程序集(.dll)
  • 该博客例子解读:
 var types = AppDomain.CurrentDomain.GetAssemblies()//获得已加载到此应用程序域上下文中的程序集。
                       .SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(Ipeople))))
                      .ToArray();//找到在应用程序域中实现了Ipeople的方法
//拓展: 
var array1=AppDomain.CurrentDomain.GetAssemblies()[15].GetCustomAttributes(true);//可获得在“Properties\AssemblyInfo.cs”中特性(如`[assembly: AssemblyCopyright("Copyright ©  2019")]`)。
var array2=AppDomain.CurrentDomain.GetAssemblies()[15].GetTypes()//获得此dll所有类元信息。
ib = (Ipeople)v.Assembly.CreateInstance(v.FullName);//创建实例
  • 这个文件是VS 创建项目时自带的文件。
  • AssemblyInfo.cs是关于本程序集(一般是dll)的一些信息,主要都是Attribute(特性),用来记录本程序集的版权,公司,以及自已可以定义的一些信息
  • 编写自定义特性—— 可以解答“自定义特性类里能写些什么成员?”

  • 特性本质就是一个类。

  • AttributeUsageAttribute类是专用于修饰特性的特性,用它可以限定特性的某些重要行为特征。有三个重要属性:AttributeTargets(可作用于哪些程序元素)、Inherited(能否被继承) 和AllowMultiple(能否对同一元素多次应用特性)。

  • 特性大家一般怎么用?

  • [JsonIgnore]标注实体类中某个字段,这样在序列化时转json时,就会忽略此字段。类似[Obsolete]当编译器发现某段代码调用了这个标注的方法时会出现警告。
  • .NET提供了丰富的固有特性(200多个):[Flags]将枚举数值看做位标记;[Serializable]元素可以被序列化;[DllImport("User32.dll")]让我们调用非托管代码等等,可以为代码中的程序元素提供丰富的描述信息。如果没有机制来在运行期获取attribute的信息,那么attribute就没有存在的意义。而反射机制就是来实现在运行期获取attribute信息
  • 实体类名上写表名、每个字段写数据库名,是实现ORM技术基础(实体对象自动存入数据库,而不需要写SQL),Dapper就使用了此技术。
  • 结合反射可以实现,传一个方法名称,就能执行相应方法,而不用new。调方法只需要传方法名称。如工厂模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值