与具有相同名称和不同返回类型的成员进行接口
本文关键字:成员 返回类型 接口 | 更新日期: 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[]);
}