黑马程序员技术交流社区

标题: object类型疑问 [打印本页]

作者: 廖新    时间: 2013-3-8 17:16
标题: object类型疑问
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             test s = new test("DDD");
  6.             Console.ReadKey();
  7.         }
  8.     }
  9.     class test
  10.     {
  11.         public test(string t)
  12.         {
  13.             Console.WriteLine("string");
  14.         }
  15.         public test(object t)
  16.         {
  17.             Console.WriteLine("object");
  18.         }
  19.     }
复制代码
如上代码,传入一个字符串参数到构造函数,输出结果是"string",其实object那个函数也可以接收,为嘛没去调用呢?
作者: 张卫刚    时间: 2013-3-8 17:24
c的?没了解清你说的,就当路过下
作者: 朱京辉    时间: 2013-3-8 17:52
这个就要从构造函数的运行来了,有时间我也想去查查
目前理解: 实例化的时候,会对应构造函数,找到最符合的构造函数
这就像你实例化一个person的时候, 信息是中国人,  person下有两个构造函数,一个是构造地球人, 一个构造中国人
匹配中国人是最合适的, 为什么不继续匹配?就是你说的object不输出, 不要忘了一个很重要的问题:
这是构造函数,不是普通函数,构造函数是用来处理对象的,永远返回一个对象,处理一个对象, 判断完string匹配后马上跳出,因为没有再继续匹配的必要了, 每次构造只可能匹配一个构造函数, 而且是匹配最合适, string比object更匹配

以上是个人观点, 我觉得有空可以仔细查一查里面的构造函数机制,相信就可以更清楚了
作者: 快乐之恋    时间: 2013-3-8 18:08
因为你传入的参数就是string类型的(”ddd“)所以调用也是调用构造函数的string
作者: 廖新    时间: 2013-3-8 18:36
朱京辉 发表于 2013-3-8 17:52
这个就要从构造函数的运行来了,有时间我也想去查查
目前理解: 实例化的时候,会对应构造函数,找到最符合的构 ...

这比喻好。。。
作者: 李贤贤    时间: 2013-3-10 13:43
传入的参数是string类型的当然会调用 public test(string t)了;object是基类,所有类型继承于他,如果你传入的是其他类型比如int类型,就会调用public test(object t);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2