当前位置:  开发笔记 > 编程语言 > 正文

在C#.NET中重载方法

如何解决《在C#.NET中重载方法》经验,为你挑选了2个好方法。

如果我们在传递给下面的重载方法之前将它转换为"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();
    }
}

还有另一种方法吗?也许使用泛型?



1> Daniel Earwi..:

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

转换thisdynamic启用动态重载支持,因此DynamicFoo包装器方法能够Foo根据参数的运行时类型调用最佳拟合重载.



2> Misko..:
public static void MethodName(object a)
{
        if(a is int)
        {
                Console.WriteLine("int");
        }
        else
        {
                Console.WriteLine("object");
        }
}

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有