闲话少说,先看代码:
一道简单而又容易出错的题目_匹配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处理。
不知道解答是否让大家满意,欢迎共同探讨。