どのような取り扱っており紛争の過負荷のメソッドシグニチャー?
-
19-09-2019 - |
質問
思この質問はまでのワームでやっていい...。:)
い方法:
private MembershipUser GetUserFromReader(SqlDataReader reader)
やりたいこの過負荷方法の異なる戻り値の型:
private User GetUserFromReader(SqlDataReader reader)
そのコンパイラの警告を発する二つの方法と同じ署名を表します。
それでは、最善の方法。私は望んでいない追加が不要 パラメータを変更方法に署名を表します。
たりと行うようなもの:
private User GetUserFromReader(T reader)
なっ探この完全なった。そうで仲間とディスカッションを重ねてる必要がある 束の変化をどう使うリーダオブジェクトです。
そのアイデア?えのきい過負荷 方法と同じ署名?
りを出---
解決
なぜそれをオーバーロード?なぜだけではなく、この方法は、それはそうのように、何を言わせます:
private MembershipUser GetMembershipUserFromReader(SqlDataReader reader)
private User GetUserFromReader(SqlDataReader reader)
他のヒント
あなたが本当に戻り値の型を区別するが、同じメソッドシグネチャを使用する場合は、ジェネリックを使用することができます:
private T GetUserFromReader<T>(SqlDataReader reader)
しかし、それだけでルーマンの答えのように、メソッドの名前を変更するためにはるかに簡単です。
ごみのリアルオプションがあります。
- 名前を変更する機能
- 変更の署名機能
ているのは嫌だきtriteが な この制限差別化手法のみを返します。
る場合には過負荷で宣言された親クラスを利用することができる new
キーワードは"非表示"の手法からの呼び出し側が、 new
(会員の宣言あります。
あなたは、過負荷の戻り値の型を変更することはできません。どのようにコンパイラが使用したいどちら伝えることになっている?
あなたが戻り、そしてちょうど適用されるものは何でも返したいかもしれませんあなたはすべての共通のスーパークラスを返している行う必要があります。
のどちらかという、または、彼らは明らかに異なることを行うために、異なった方法に名前を付けます。
簡単な答えは限りC#が懸念されるとして、あなたができない、ということです。戻り値の型によってオーバーロードすることは許可されているMSILことではなく、C#と(私はがのだと思う)。
(すなわち、「ダミー」のパラメータを追加することは除く)唯一の現実的な選択は、一つの方法GetMembershipUserFromReaderおよびその他のGetUserFromReader
を呼び出すことです