求思路,大家可以给点意见

maomixi 2013-01-08 12:47:39
有3个类 A类UI B类 C类接口 D类继承C类的接口并实现

B类通过ID反射了D类并转换(IGeneric)接口



IGeneric IObj = (IGeneric)Assembly.Load("SocketMethod").CreateInstance("SocketMethod." + Msg.ToString());



现在问题是D类有一些委托事件。A类UI要绑定(也就是要获得)D类有的有委托事件有的没有,A类怎么才可以解决,不能用静态事件
...全文
192 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
反射委托(事件)链 不过感觉LZ的问题可以通过良好的设计更好地解决
gxingmin 2013-01-08
  • 打赏
  • 举报
回复
mi.MemberType不明确是什么意思? 其实上面例子已经很清楚了啊,我再给你改改吧,你运行一下看看,D1有事件,D2无事件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SocketMethod
{
    class Program
    {  

        static void Main(string[] args)
        {
           // IGeneric IObj = (IGeneric)System.Reflection.Assembly.Load("SocketMethod").CreateInstance("SocketMethod." + Msg.ToString());

            A a = new A();
            if (a.Check("D1"))
                Console.WriteLine("D1有事件");
            else
                Console.WriteLine("D1无事件");

            if (a.Check("D2"))
                Console.WriteLine("D2有事件");
            else
                Console.WriteLine("D2无事件");
           
        }       
        
    }

    public class A
    {
        public bool  Check(string Msg)
        {
            IGeneric IObj = (IGeneric)System.Reflection.Assembly.Load("SocketMethod").CreateInstance("SocketMethod." + Msg.ToString());

            System.Reflection.MemberInfo[] mis = IObj.GetType().GetMembers();
            foreach (System.Reflection.MemberInfo mi in mis)
            {
                switch (mi.MemberType)
                {
                    case System.Reflection.MemberTypes.Event:
                        //Console.WriteLine("有事件定义!");
                        //break;
                        return true;
                    case System.Reflection.MemberTypes.NestedType:
                        //Console.WriteLine("有委托定义!");
                        //break;
                        return true;
                }
            }

            return false;
        }

        
    }

    public interface IGeneric
    {
    }

    //有事件
    public class D1 : IGeneric
    {
        public delegate void EventHandler();
        public event EventHandler Click;
    }

    //无事件
    public class D2 : IGeneric
    {
        public void func()
        {
        }
    }
}
maomixi 2013-01-08
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
反射委托(事件)链 不过感觉LZ的问题可以通过良好的设计更好地解决
因为这是以前别人写过一点的。。我接这些,
maomixi 2013-01-08
  • 打赏
  • 举报
回复
引用 3 楼 gxingmin 的回复:
switch (mi.MemberType ) { case System.Reflection.MemberTypes.Event: Console.WriteLine("有事件定义!"); ……
mi.MemberType 这个不明确。。因为我有很多D类都继承C类接口,D类有的是有事件,有的没有
maomixi 2013-01-08
  • 打赏
  • 举报
回复
A 类怎么用呢,
gxingmin 2013-01-08
  • 打赏
  • 举报
回复
switch (mi.MemberType ) { case System.Reflection.MemberTypes.Event: Console.WriteLine("有事件定义!"); break; case System.Reflection.MemberTypes.NestedType: Console.WriteLine("有委托定义!"); break; }
gxingmin 2013-01-08
  • 打赏
  • 举报
回复
用反射查看IObj类里有没有事件定义
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {  

        static void Main(string[] args)
        {
           // IGeneric IObj = (IGeneric)System.Reflection.Assembly.Load("SocketMethod").CreateInstance("SocketMethod." + Msg.ToString());

            IGeneric IObj = (IGeneric)System.Reflection.Assembly.Load("ConsoleApplication1").CreateInstance("ConsoleApplication1.D");

            System.Reflection.MemberInfo[] mis = IObj.GetType().GetMembers();
            foreach (System.Reflection.MemberInfo mi in mis)
            {
                switch (mi.MemberType )
                {
                    case System.Reflection.MemberTypes.Event:
                    Console.WriteLine("有事件定义!");
                        break;
                }
            }
           
        }       
        
    }
    public interface IGeneric
    {
    }

    public class D : IGeneric
    {
        public delegate void EventHandler();
        public event EventHandler Click;
    }
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧