让多个接口对应同一个对象,并让这个对象实现多个接口,同时通每个接口对应上这个对象,对象只能有一个。
也就是说通过多个接口实现同一个对象。
就像组件一样。

解决方案 »

  1.   

    有什么问题?
    对于你说的问题,
    1:一个对象实现多个接口;
    2:多个接口对应一个对象;
    这都完全没有问题,看:public interface IA
    {
       void FooA();
    }
    public interface IB
    {
       void FooB();
    }
    public class TIAB:IA,IB
    {
       public void FooA();
       public void FooB();
    }public void Main()
    {
       //这里都OK
       TIAB t = new TIAB();
       IA ia = t as IA;
       IB ib = t as IB;
       ia.FooA();
       ib.FooB();
       t.FooA();
       t.FooB();
    }关键的问题在于你说的只“实现一个”,是否是指在系统范围内只能存在一个TIAB类的对象,如果是这样的话,参考设计模式中的单实例(Singleton)。
      

  2.   

    对于单实例的情况,结合上面的我再写了一小段,这个代码经过测试。public interface IA
    {
        void FooA();
    }
    public interface IB
    {
        void FooB();
    }
    public class TIAB : IA, IB
    {
        public void FooA()
        {
            Console.WriteLine("FOOA");
        }
        public void FooB()
        {
            Console.WriteLine("FOOB");
        }
        private TIAB() { }   //私有构造函数,在外部无法构造新的TIAB对象    private static TIAB single = new TIAB();    public static TIAB GetTIAB()    //唯一取得TIAB对象的方法就是这个,它返回的永远是single
        {
            return single;
        }
    }class Program
    {
        static void Main(string[] args)
        {
            //这里都OK
            TIAB t = TIAB.GetTIAB();
            IA ia = t as IA;
            IB ib = t as IB;
            ia.FooA();
            ib.FooB();
            t.FooA();
            t.FooB();        IB ib2 = ia as IB;   //注意这里:可以通过接口查询其它接口,甚至对象。
            ib2.FooB();        TIAB t2 = ib as TIAB;
            t2.FooA();
            t2.FooB();        Console.ReadKey();
        }
    }
    //程序输出结果:
    //FOOA
    //FOOB
    //FOOA
    //FOOB
    //FOOB
    //FOOA
    //FOOB
      

  3.   


    显示实现啊
    比如
    public interface IA
    {
        void funcAB();
    }public interface IB
    {
        void funcAB();
    }public class AB:IA,IB
    {
        public IA.funcAB()
        {
        }
        public IB.funcAB()
        {
        }
    }
      

  4.   

    通过接口显示调用,接口内的方法啊!这样就不会重名了
    public interface IA 

        void funcAB(); 
    } public interface IB 

        void funcAB(); 
    } public class AB:IA,IB 

        public IA.funcAB() 
        { 
        } 
        public IB.funcAB() 
        { 
        } 
    }
      

  5.   

    恩,显式调用。不过我补充两点:
    1:如果IA和IB的方法funcAB()是一样的,你也可以无需显式的声明。比如:
    public class AB:IA,IB
    {
       public void funcAB(){}
    }
    无论你通过IA还是IB接口调用funcAB都会执行这一个方法;2:我不清楚是不是编译器的原因。至少在2008中,对于显式的实现接口的情况不能使用public关键字,而必须保留为空,系统自动保证它为public。
    即:楼上的写的
    public IA.funcAB()
    是无法通过编译的,要写成
    IA.funcAB()
    不过这里还有一个小小的错误,没写返回值,这样:
    void IA.funcAB(){}
    就可以了。
      

  6.   

    void funcAB(); 
    的方法内容要实现不同的操作,就是说两个接口有不同的操作,
      

  7.   


    你引用的那个,他copy的我的,我没在vs里面写,就是随便写的,确实显示实现的时候不能写public,而且,我忘了写void了
      

  8.   

     public void printA()
            {
                Console.WriteLine("FaceA welcome A!");
            }        public void printB()
            {
                Console.WriteLine("FaceB welcome B!");         
            }        void FaceA.print()
            {////显式调用
                Console.WriteLine("相同的方法,FaceA!");
            }        void FaceB.print()
            {//显式调用
                Console.WriteLine("相同的方法,FaceB!");
            }        private Test() { }        public static Test instance = null;
            public static readonly object padlock = new object();        public static Test getObject()
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new Test();                        
                        }
                    }
                }
                return instance;
            }这是实现的内容。
    下面是调用的方法:Test instance = Test.getObject();            instance.printA();
                instance.printB();                        FaceA IA = instance as FaceA;
                FaceB IB = instance as FaceB;            IA.printA();
                IB.printB();            FaceB ib = IA as FaceB;
                FaceA ia = IB as FaceA;            ia.printA();
                ib.printB();            ia.print();
                ib.print();            Test test = IB as Test;
                test.printA();
                test.printB();在这里我想通过instance 直接调用下面两个方法
     void FaceA.print()
            {////显式调用
                Console.WriteLine("相同的方法,FaceA!");
            }        void FaceB.print()
            {//显式调用
                Console.WriteLine("相同的方法,FaceB!");
            }
    请问需要怎么做?