When you implement two interfaces with the same method, how do you know which one is called?

后端 未结 8 1540
再見小時候
再見小時候 2021-01-13 05:18

If you have TheMethod() in interfaces I1 and I2, and the following class

class TheClass : I1, I2
{
    void TheMethod()
}

If s

8条回答
  •  盖世英雄少女心
    2021-01-13 05:42

    If that's how the client code is using the class, it doesn't really matter. If it needs to do something interface specific, it should declare the interface it needs, and assign the class to that e.g.

    I1 i = new TheClass()
    i.TheMethod();
    

    Of course, using your current implementation TheClass, it doesn't matter if declared i as I1, or I2, as you only have a single implementation.

    If you want a separate implementation per interface, then you need to create explicit implementations ...

        void I1.TheMethod()
        {
            Console.WriteLine("I1");
        }
    
        void I2.TheMethod()
        {
            Console.WriteLine("I2");
        }
    

    But keep in mind, explicit implementations cannot be public. You can implement just one explicitly, and leave the other as the default which can be public.

        void I1.TheMethod()
        {
            Console.WriteLine("I1");
        }
    
        public void TheMethod()
        {
            Console.WriteLine("Default");
        }
    

    Have a look the msdn article for more details.

提交回复
热议问题