与具有相同名称和不同返回类型的成员进行接口

本文关键字:成员 返回类型 接口 | 更新日期: 2023-09-27 18:35:00

为什么我不能执行以下操作?

public interface ICommunication
{
    int Send(Dictionary<string, string> d);
    int Send(byte[] b);
    Dictionary<string, string> Receive();
    byte[] Receive(); // Error
}

Receive()的标志不同,但参数相同。为什么编译器查看参数而不是成员签名?

ICommunication"已经定义了一个名为"接收"的成员,其中 相同的参数类型。

我该如何解决这个问题?

我可以重命名Receive()如下所示,但我更愿意将其命名为 Receive() .

public interface ICommunication
{
    int Send(Dictionary<string, string> d);
    int Send(byte[] b);
    Dictionary<string, string> ReceiveDictionary();
    byte[] ReceiveBytes(); 
}

与具有相同名称和不同返回类型的成员进行接口

返回类型不是方法签名的一部分,因此从语言角度来看,接口将声明相同的方法两次。

来自 Microsoft 的 C# 编程指南:

方法

的返回类型不是方法签名的一部分,用于方法重载。但是,在确定委托与其指向的方法之间的兼容性时,它是方法签名的一部分。

如果您决定编写以下内容,该怎么办:

var x = Receive();

应该使用什么方法?返回类型是什么?

在 C# 中不允许这样做,因为当您使用 Receive() 调用它时,系统如何知道要调用哪个方法?

调用返回字典还是字节数组?

所以设计师让它不受支持

例如:var returnVal = ICommunication.Receive()

编辑:

public interface ICommunication
{
    int Send(Dictionary<string, string> d);
    int Send(byte[] b);
   void Receive(out Dictionary<string, string>);
   void Receive(out byte[]); 
}