您的位置:首页 > 编程语言 > C#

C#自定义属性实现

2017-08-14 17:58 323 查看
在用c#写程序的时候,可能会用到自定义属性来传递一些数据,这次就来简单看看自定义属性的用法:

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: