一般如果一个
classA :InterfaceB
那么通过下面的方式:
Type _Asstype = ass.GetType(_classA);
InterfaceB pi = Activator.CreateInstance(_Asstype) as InterfaceB;
这个创建这个类对象。可是如果:
classA :abstractC, InterfaceB
那么如何类似上面创建对象?

解决方案 »

  1.   


    Type   _Asstype   =   ass.GetType(_classA); 
    classA   pi   =   Activator.CreateInstance(_Asstype)   as   classA;
      

  2.   

    为什么不试着把C和B合起来定义呢?
    或者:
    Object   pi   =   Activator.CreateInstance(_Asstype)   as   InterfaceB;调用时用(InterfaceB)pi和(abstractC)pi。
      

  3.   

    20分有点少,要求加分在接口里加上一个属性,通过该属性来访问abstractC:using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;namespace ConsoleApplication45
    {
        public abstract class abstractC 
        {
            public string ClassName = "abstractC";
            public abstract char Method_C();
        }
        public interface InterfaceB
        {
            abstractC ToAbstractC { get;}
            char Method_B();
        }
        class A : abstractC, InterfaceB
        {
            private char a='A', b='B', c='C';
            public int Method_A()
            {
                return a;
            }
            public override char Method_C()
            {
                return c;
            }
            char InterfaceB.Method_B()
            {
                return b;
            }
            abstractC InterfaceB.ToAbstractC
            {
                get { return this; }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Assembly ass = Assembly.GetExecutingAssembly();
                Type _Asstype = ass.GetType(new A().ToString(),true);
                InterfaceB pi = Activator.CreateInstance(_Asstype) as InterfaceB;
                // InterfaceB
                Console.WriteLine(pi.Method_B());
                // abstractC
                Console.WriteLine(pi.ToAbstractC.ClassName);
                Console.WriteLine(pi.ToAbstractC.Method_C());
                // class A 的内容不可见
                // Console.WriteLine(pi.Method_A());
                Console.Read();
            }
        }
    }
      

  4.   

    代码写的不强壮,修改一下
            abstractC InterfaceB.ToAbstractC
            {
                get { return this as abstractC; }
            }
      

  5.   

    刚才调试了一下,修改没有任何作用,vs2005里编译时 class A : InterfaceB 通不过,看来只好手动填写让它return this 还是 return null 了。
      

  6.   

    Q282898034:
    谢谢你的code,你的做法 不是很适合我的系统(这种方式会造成interface的不稳定)
    我的做法和panjf的不谋而合:
    Object pi =Activator.CreateInstance(_Asstype)as InterfaceB;
    调用时用(InterfaceB)pi和(abstractC)pi。谢谢各位,结贴!!