1

わかりました、私は気が狂っているかもしれませんが、未知の型の値を返して関数を取得させることは可能ですか?

基本的には次のような関数...

public static ?????? Test(char c)
{
    if(c == char)
        return instance of SOMECLASS
    else
        return instance of SOMEOTHERCLASS
}

// so i could do
Test(new char()).SOMECLASS_METHOD();
Test(new int()).SOMEOTHERCLASS_METHOD();

よろしくお願いします

編集:追加するだけですが、インテリセンスでも表示する方法はありますか?

4

2 に答える 2

4

戻ることができますdynamic(C# 4 以降で)。これにより、動的バインディングを使用できます。

これにより、任意のメソッドを記述でき、オブジェクトにメソッド (またはプロパティ) が存在しない場合にのみ実行時に失敗します。

たとえば、次のように記述できます。

class Foo { 
   void Bar() { Console.WriteLine("Foo.Bar"); }
}

class Bar { 
   void Baz() { Console.WriteLine("Bar.Baz"); }
}

public static dynamic Test(char c)
{
   if (c == 'f') return new Foo();
   else return new Bar();
}

これで、次のように書くことができます。

Test('f').Bar();
Test('q').Baz();
Test('z').Bar(); // Will raise exception at runtime
于 2012-10-05T23:05:48.393 に答える
0
public static object Test(char c)
{
    if(c == char)
        return instance of SOMECLASS
    else
        return instance of SOMEOTHERCLASS
}

// so i could do
var r = Test(new char());
if (r is SOMECLASS)
   (r as SOMECLASS).SOMECLASS_METHOD();
var rr = Test(new int());
if (rr is SOMEOTHERCLASS)
   (rr as SOMEOTHERCLASS).SOMEOTHERCLASS_METHOD();
于 2012-10-05T23:09:37.677 に答える