返回未知类的实例?

时间:2012-10-05 23:05:09

标签: c#

好的,所以,我可能会疯了但是有可能返回一个未知类型的值并让它获得函数吗?

基本上是一个看似......的功能

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

请&感谢

编辑:只是要添加,有没有办法让它出现在intellisense中?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();