C# 返回未知类的实例?

C# 返回未知类的实例?,c#,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(ne

好吧,我可能是疯了,但有可能返回一个未知类型的值并让它获取函数吗

基本上是一个看起来像

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中?

您可以返回
动态
(在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

您可以返回
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

我感觉这个问题来自于一长串其他的东西…你在这里想要完成什么?仅供参考-你所做的任何让你不需要知道类型的事情(反射/动态/等等)也会使intellisense不起作用。我感觉这个问题来自于一长串其他的东西…你在这里试图实现什么?仅供参考-你所做的任何不需要知道类型(反射/动态/等)的事情也会使intellisense不起作用。谢谢。有没有办法让它也出现在intellisense中?@Ber53rker没有。在运行时之前,该类型是“未知”的,因此在使用
动态
时没有intellisense。我认为值得一提的是,如果OP认为他需要使用这种技术,几乎可以肯定他的设计有问题。@KirkWoll在很多情况下,是的。不总是这样-偶尔会有很好的理由使用dynamic,但在C#中它们很少。对,因此“几乎可以肯定”。无论如何,你的评论满足了我的学究作风谢谢有没有办法让它也出现在intellisense中?@Ber53rker没有。在运行时之前,该类型是“未知”的,因此在使用
动态
时没有intellisense。我认为值得一提的是,如果OP认为他需要使用这种技术,几乎可以肯定他的设计有问题。@KirkWoll在很多情况下,是的。不总是这样-偶尔会有很好的理由使用dynamic,但在C#中它们很少。对,因此“几乎可以肯定”。无论如何,你的评论满足了我的学究作风