0

たとえば、私はこのような3つのオーバーロードされたメソッドを持つクラスを持っている:一連のオーバーロードされたメソッドで型キャストを行わずに、オブジェクト型の入力値でメソッドを呼び出す方法

class MyClass 
{ 
    int sum(int i) 
    { 
     // Method implementation. 
    } 
    int sum(string x) 
    { 
     // Method implementation. 
    } 
    int sum(object o) 
    { 
     // Method implementation. 
    } 
} 

私の質問は、私は任意の値(整数、文字列またはオブジェクト)を渡すことではMyClassの合計メソッドを呼び出すときにのみ呼び出す必要があります(オブジェクトタイプの入力パラメータを持つ)第三の方法

class MainClass 
{ 
    static void Main(string[] args) 
    { 
     MyClass obj = new MyClass(); 
     obj.sum(10); 
     obj.sum("X") 
    } 
} 
+0

は、なぜあなたは常にオブジェクトを取るバージョンを呼び出すようにしたい場合は、他のタイプのための特定のオーバーロードがありますか? –

答えて

0

バージョンを呼び出すようにコンパイラに指示するいくつかの方法を必要とし、実行時の型を使用しているため、あなたは「型キャストなし」と述べていますができませんそれはやってみる。ボクシングのintオブジェクトは、コンパイラはオブジェクトバージョン

sum(1);//call int version 
sum((object)1); //call object version 
sum((string)(object)"1"); //call string version 
sum((object)(int)(object)1); //call object version 
+0

私はそれがコンパイラであり、この決定を行うランタイムではないと信じています。 – daniu

+0

@Caius Jard ..私はあなたに完全に同意します。インタビュー中に実際に同じ質問が私に聞かれました。インタビュアーにも同じことを説明しましたが、彼はこれを達成する方法があると言いました。 ..私は彼に説明するように頼んだとき、彼は答えをオンラインで投稿した。あなたは複数の答えを得るだろう...彼は余分な普通の天才かもしれない...しかし、私はより良い答えを見つけることができませんでした。 –

+0

私はここに投稿しました。面接者が探していた答えを誰かが持っているかもしれないことを期待しました:P –

0

まず第一に選ぶことを意味するとして、私はあなたが時々int秒で作業する場合sum機能の1つのバージョンを呼び出したいと時々したい場合としましょう別のものを呼び出すと、オーバーロードがおそらく正しいツールではありません。オーバーロードは、概念的にはさまざまな種類の操作を概念的に実装するときに最も適しています。コンパイラは、各関数を呼び出す関数を自動的に把握する必要があります。関数が呼び出されるより手作業で制御する必要がある場合は、おそらく異なる名前を使用するほうがよいでしょう。

class MyClass 
{ 
    int sum(int i) 
    { 
     // Method implementation. 
    } 
    int sum(string x) 
    { 
     // Method implementation. 
    } 
    int sum(object o) 
    { 
     sum_object(o); 
    } 
    int sum_object(object o) 
    { 
     // Method implementation for objects 
    } 
} 

その後:あなたは、これはあなたが何をしたいかであることを確信している場合、あなたはのように、パブリックインターフェイス内の他の機能の点でオブジェクトのオーバーロードされたバージョンを実装することができ、言っ

オブジェクトバージョンをintおよびstringオブジェクトに適用する場合は、代わりにsum_objectを直接呼び出すだけです。

+0

これはオーバーロードしていません。 –

+0

オブジェクトの 'sum'のオーバーロードされたバージョンがまだあります。オーバーロードの解像度があなたの目的に合った' '間違った' 'バージョンのバージョンを選択するときに実際に呼び出す関数を呼び出す代わりの方法を提供しています。 –

関連する問題