为什么我不能做以下事情?
public interface ICommunication
{
int Send(Dictionary<string, string> d);
int Send(byte[] b);
Dictionary<string, string> Receive();
byte[] Receive(); // Error
}
Receive()
的符号不同但参数相同。为什么编译器会查看参数而不是成员签名?
ICommunication'已经定义了一个名为'Receive'的成员 相同的参数类型。
我怎么能绕过这个?
我可以重命名Receive()
,但我更喜欢将其命名为Receive()
。
public interface ICommunication
{
int Send(Dictionary<string, string> d);
int Send(byte[] b);
Dictionary<string, string> ReceiveDictionary();
byte[] ReceiveBytes();
}
答案 0 :(得分:6)
返回类型不是方法签名的一部分,因此从语言的角度来看,接口声明了两次相同的方法。
来自Microsoft's C# Programming Guide:
为了方法重载的目的,方法的返回类型不是方法签名的一部分。但是,在确定委托与其指向的方法之间的兼容性时,它是方法签名的一部分。
答案 1 :(得分:3)
如果您决定编写以下内容,该怎么办:
var x = Receive();
它应该使用什么方法?什么是返回类型?
答案 2 :(得分:1)
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[]);
}