• Attribute


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ReflectionClass
    {
    public enum Fruit
    {
    Apple,
    Banana,
    Pear,
    Watermelon
    }

    public class FruitTypeAttribute:System.Attribute
    {
    public FruitTypeAttribute(Fruit fruit)
    {
    this.fruit = fruit;
    }

    protected Fruit fruit;
    public Fruit TheFruit
    {
    get { return fruit; }
    set { fruit = value; }
    }
    }

    public class FruitTest:IFruit
    {
    [FruitType(Fruit.Apple)]
    public void AppleMethod() { }

    [FruitType(Fruit.Pear)]
    public void PearMethod() { }
    }
    }

    在使用Attribute的时候[FruitType(Fruit.Apple)]实际上就是实现了FruitTypeAttribute的构造方法,而在构造方法中又为TheFruit属性赋值。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;

    namespace ReflectionTest
    {
    class AssemblyTest
    {
    public static Assembly ReflectionClassAssembly
    {
    get
    {
    return Assembly.Load("ReflectionClass");
    }
    }

    public static void ShowAttributeInfo()
    {
    //object fruitTest = ReflectionClassAssembly.CreateInstance("ReflectionClass.FruitTest");
    Type fruitTest = ReflectionClassAssembly.GetType("ReflectionClass.FruitTest");
    MethodInfo method
    = fruitTest.GetMethod("AppleMethod", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);//可省略第二个参数

    Type fruitType
    = ReflectionClassAssembly.GetType("ReflectionClass.FruitTypeAttribute");
    Attribute attr
    = Attribute.GetCustomAttribute(method, fruitType);
    if (attr!=null)
    {
    PropertyInfo property
    = fruitType.GetProperty("TheFruit", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);//可省略第二个参数
    Console.WriteLine("the {0} attribute is : {1}", method.Name, property.GetValue(attr, null));
    }
    //Attribute[] attrs = Attribute.GetCustomAttributes(method);
    //if (attrs.Length > 0)
    //{
    //Console.WriteLine("the {0} attribute is : {1}",method.Name,property.GetValue(attrs[0],null));
    //((ReflectionClass.FruitTypeAttribute)attrs[0]).TheFruit
    //}
    }
    }
    }

  • 相关阅读:
    汕头市队赛 SRM1X T1
    夏令营
    路上路径求和
    USACO 刷题记录bzoj
    整除
    Xor路
    超低延时安防直播系统webrtc-client在浏览器播放没有音频的问题如何排查解决?
    如何使用TSINGSEE青犀视频同屏功能组件EasyScreenLive通过sdk推流到腾讯云直播?
    网络穿透/云端组网/视频拉转推服务EasyNTS上云网关运维中数据库检测功能的介绍
    【解决方案】变电站智慧消防如何实现远程集中监控?EasyCVR变电站安全综合管理系统搭建
  • 原文地址:https://www.cnblogs.com/xingbinggong/p/2154040.html
Copyright © 2020-2023  润新知