c#自定义Attribute获取接口实现

一般的接口实现多态

定义接口

    interface Ipeople
    {
        void say();
    }

定义实现的类

  public class man : Ipeople
    {
        public void say()
        {
            MessageBox.Show("man");
        }
    }

 public class woman : Ipeople
    {
        public void say()
        {
            MessageBox.Show("woman");
        }
    }

一般实现的方法

升级版

添加自定义(这个网上好多)

实现类

调用方法

   private static void NewMethod(string tpye)
        {
            Ipeople ib = null;
            var types = AppDomain.CurrentDomain.GetAssemblies()
                        .SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(Ipeople))))
                        .ToArray();
            foreach (var v in types)
            {
                var attribute = v.GetCustomAttributes(typeof(NameAttribute), false).FirstOrDefault();
                if (attribute != null && ((NameAttribute)attribute).Name == tpye)
                {
                    ib = (Ipeople)v.Assembly.CreateInstance(v.FullName);
                    break;
                }
            }
            if (ib != null) ib.say();
        }

这个可以避免需要维护swich语句

 

posted @ 2019-04-18 16:09  白色風車  阅读(858)  评论(1编辑  收藏  举报