C#自定义属性实现
2017-08-14 17:58
323 查看
在用c#写程序的时候,可能会用到自定义属性来传递一些数据,这次就来简单看看自定义属性的用法:
1.写自定义属性类
a.声明自定义属性类,继承自Attribute类
b.定义所需的构造函数,字段和属性
c.添加AttributeUsageAttribute属性
2.给类中字段或属性增加自定义属性(因为自定义属性的AttributeUsage的构造参数为AttributeTargets.Field)
3.通过type获得类字段或属性的自定义属性的值
a.字段用type.GetFields()属性用type.GetProperties()来获取
b.然后用GetCustomAttribute来获取自定义属性
1.写自定义属性类
a.声明自定义属性类,继承自Attribute类
b.定义所需的构造函数,字段和属性
c.添加AttributeUsageAttribute属性
[AttributeUsage(AttributeTargets.Field)] public sealed class ByteCountAttribute:Attribute { private Int32 length; public ByteCountAttribute(Int32 len) { length = leh; } public Int32 Length { get{ return length;} set{ length = value;} } }
2.给类中字段或属性增加自定义属性(因为自定义属性的AttributeUsage的构造参数为AttributeTargets.Field)
public class TransData { [ByteCount(5)] public int[] veriData;//需要5个元素,20个字节 [ByteCount(5)] public double[] horiData;//需要5个元素,40个字节 public TransData() { veriData = new int[5]; horiData = new double[5]; } }
3.通过type获得类字段或属性的自定义属性的值
a.字段用type.GetFields()属性用type.GetProperties()来获取
b.然后用GetCustomAttribute来获取自定义属性
public class Utils { public static int GetByteCount(object obj) { int byteCount = 0; Type type = obj.GetType(); foreach(var field in type.GetFields()) { Type t = field.FieldType; if(t.IsArray) { TypeCode typeCode = Type.TypeCode(t); switch(typeCode) { case Type.Int32: byteCout += 4 * GetArraySize(field); break; case Type.Double: byteCout += 8 * GetArraySize(field); break; default: break; } } } return byteCount; } private static int GetArraySize(FieldInfo fieldInfo) { var bcAttri = (ByteCountAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(ByteCountAttribute)); return bcAttri.Length; } }
相关文章推荐
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- c# 实现自定义属性改变触发自定义事件
- 在C#中实现自定义属性
- 通过c# 实现自定义属性改变触发自定义事件 ,理解自定义事件及其触发过程
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
- (C#)DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除
- Angular2实现自定义双向绑定属性
- 在C#使用字典存储事件示例及实现自定义事件访问器
- 绘图与动画之使用自定义属性与图像掩膜实现灯泡开关动画
- C# 自定义类型实现foreach 迭代
- Android解析自定义属性的XML实现底部导航栏TabSelectedView,实现灵活的配置扩展
- Core Animation 五 (美化图层,用动作实现自定义动画、为自定义的属性添加动画以及线程)
- 通过自定义属性存储数据实现输入框获得焦点与失去焦点改变value值
- (C#)DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除
- C#利用反射实现两个类的对象之间相同属性的值的复制
- VS2005下自定义用户控件 如何实现属性及方法的相关智能提示
- C#动态对象(dynamic)示例(实现方法和属性的动态)
- C#编程实现自定义热键的方法