有没有办法采用相同的方法并重载其返回类型?就像我在下面的代码中所做的那样。我试过这个,但它说这两者之间存在歧义。
//supporting methods
private AutoResetEvent ReturnData = new AutoResetEvent(false);
public void PostMessage(string msg)
{ this.Message = msg; this.ReturnData.Set(); }
private string Message;
//a return value overload
public string GetMessage()
{
this.ReturnData.WaitOne();
return this.Message;
}
public byte[] GetMessage(){
this.ReturnData.WaitOne();
return encoder.GetBytes(Message);
}
答案 0 :(得分:2)
您不能通过C#中的返回类型重载。
当需要在.NET框架中执行类似操作时,通常会更改方法名称以包含返回类型的名称。
示例:BinaryReader
double ReadDouble() { ... }
int ReadInt32() { ... }
double GetDouble(int i) { ... }
int GetInt32(int i) { ... }
etc...
在您的情况下,您可以使用GetMessageString
和GetMessageBytes
。
答案 1 :(得分:2)
“方法的签名在声明方法的类中必须是唯一的。方法的签名包括方法的名称,类型参数的数量以及数量,修饰符和类型参数。方法的签名不包括返回类型。“
答案 2 :(得分:2)
重载解析适用于方法签名。
方法签名由方法名称和参数类型和数字组成,但不包括返回类型。
这意味着您不能仅通过返回类型重载方法。
在这种情况下,更好的设计方法是根据返回类型命名方法。
答案 3 :(得分:0)
不,你不能,签名不依赖于返回类型,因此解决方案可能是:
public string GetMessageString()
{
this.ReturnData.WaitOne();
return this.Message;
}
public byte[] GetMessageBytes(){
this.ReturnData.WaitOne();
return encoder.GetBytes(Message);
}
或者您可以使用泛型类型解决问题:
public T GetMessage<T>()
{
this.ReturnData.WaitOne();
if(typeof(T) == typeof(string))
return this.Message;
else if(typeof(T) == typeof(byte[]))
return encoder.GetBytes(Message);
return default(T);
}