如果我们在传递给下面的重载方法之前将它转换为"Object",则Int32类型的变量将不会作为Int32进行线程化:
public static void MethodName(int a) { Console.WriteLine("int"); } public static void MethodName(object a) { Console.ReadLine(); }
要将它作为Int32处理,即使它被强制转换为"Object"也可以通过反射来实现:
public static void MethodName(object a) { if(a.GetType() == typeof(int)) { Console.WriteLine("int"); } else { Console.ReadLine(); } }
还有另一种方法吗?也许使用泛型?
在C#4.0之前,运行时重载解析将不可用,它具有dynamic
:
public class Bar { public void Foo(int x) { Console.WriteLine("int"); } public void Foo(string x) { Console.WriteLine("string"); } public void Foo(object x) { Console.WriteLine("dunno"); } public void DynamicFoo(object x) { ((dynamic)this).Foo(x); } } object a = 5; object b = "hi"; object c = 2.1; Bar bar = new Bar(); bar.DynamicFoo(a); bar.DynamicFoo(b); bar.DynamicFoo(c);
转换this
为dynamic
启用动态重载支持,因此DynamicFoo
包装器方法能够Foo
根据参数的运行时类型调用最佳拟合重载.
public static void MethodName(object a) { if(a is int) { Console.WriteLine("int"); } else { Console.WriteLine("object"); } }