一道简单而又容易出错的题目

闲话少说,先看代码:

    class clsArray2D
    
{
        
private void Print(object obj)
        
{
            Console.WriteLine(
"object");
        }


        
private void Print(string str)
        
{
            Console.WriteLine(
"string");
        }


        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            clsArray2D array
=new clsArray2D();
            array.Print(
null);                                                      
            Console.ReadLine();
//暂时不关闭窗口
        }

    }

猜最后输出会是什么?"object"?"string"?

如果你的答案是“string”,那么恭喜你答对了。

想知道原因么?请待我试为你解答,当然也不一定正确,只是个人观点。
因为string是object的子类,所以等于private void print(Istring str)重载了private void print(object obj),所以调用总是先匹配private void print(string str),至于null它是任意类型,所以他既可以是string又可以是object,但因为前面的原因,null按照string处理。

不知道解答是否让大家满意,欢迎共同探讨。

posted @ 2007-02-06 10:16  周金桥  阅读(149)  评论(0编辑  收藏  举报