2

なぜ私は次のことができないのですか?

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(); 
}
4

3 に答える 3

6

戻り値の型はメソッド シグネチャの一部ではないため、言語の観点から見ると、インターフェイスは同じメソッドを 2 回宣言しています。

Microsoft の C# プログラミング ガイドから:

メソッドの戻り値の型は、メソッドのオーバーロードを目的としたメソッドのシグネチャの一部ではありません。ただし、デリゲートとそれが指すメソッドとの間の互換性を判断するときは、メソッドのシグネチャの一部です。

于 2013-10-11T10:55:13.060 に答える
3

次のようにコーディングするとしたらどうなるでしょうか。

var x = Receive();

どのような方法を使用する必要がありますか? リターンタイプは何ですか?

于 2013-10-11T10:40:16.603 に答える