C#自定义属性实现

在用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;
        }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值