在C#中实现2个类似的接口

时间:2014-01-30 20:16:13

标签: c# interface

是否可以按如下方式实现以下2个接口?这段代码编译但在阅读了如何实现这些之后,我不确定这是否有用。

Interface1
{
   Authorize(string p1, int p2);
   LookupCode(int test);
   GetObject(int ID);
}

Interface2
{
   Authorize(string p1);
   LookupCode(int test);
   GetObject(int ID);
}

class WebService : Interface1, Interface2
{
   Authorize(string p1, int p2)
   {
   }

   Authorize(string p1)
   {
   }

   LookupCode(int test)
   {
   }
   GetObject(int ID)
   {
   }
}

由于Authorize方法具有不同的签名,它们是否可以正确映射到正确的接口?

其他相同的方法具有相同的实现,并且WebService类中只有一个实例。那么这也可以吗?

2 个答案:

答案 0 :(得分:4)

  

由于Authorize方法具有不同的签名,它们是否可以正确映射到正确的接口?

绝对。事实上,为什么它们可以正确地映射到它自己的接口,而不是另外两个方法,它们同时映射到两个接口。

注意:您的代码有明显的语法错误。但是,由于您提到您的代码已编译,我认为您的实际代码已修复这些错误。

答案 1 :(得分:0)

如果您确实希望在两个接口中使用相同的方法实现不同的实现,则应使用显式接口:

 interface Interface1
    {
        void Authorize(string p1, int p2);
        void LookupCode(int test);
        void GetObject(int ID);
    }

    interface Interface2
    {
        void Authorize(string p1);
        void LookupCode(int test);
        void GetObject(int ID);
    }

    class WebService : Interface1, Interface2
    {
        public void Authorize(string p1, int p2)
        {
            throw new NotImplementedException();
        }

        public void Authorize(string p1)
        {
            throw new NotImplementedException();
        }

        void Interface2.LookupCode(int test)
        {
            throw new NotImplementedException();
        }

        void Interface2.GetObject(int ID)
        {
            throw new NotImplementedException();
        }

        void Interface1.LookupCode(int test)
        {
            throw new NotImplementedException();
        }

        void Interface1.GetObject(int ID)
        {
            throw new NotImplementedException();
        }
    } 

但如果您不需要自己重复,请使用interface segregation