黑马程序员技术交流社区
标题: 我发现视频里的一个问题, [打印本页]
作者: 陈君 时间: 2014-5-30 13:21
标题: 我发现视频里的一个问题,
本帖最后由 陈君 于 2014-6-1 09:34 编辑
***构造方法严格意义上讲,只完成:分配内存空间,创建对象,将对象的字段初始化为null,0或false(默认的构造方法)。
以上是视频里对构造方法所完成工作的介绍。
但是我认为这里讲错了
因为我们每次调用构造函数的时候都要用new。而new的作用是动态分配内存,所以这里构造函数应该是没有分配内存空间的作用的。
或者说new分配好内存后,是通过构造方法来把各各分散的内存块联系到一个对象里面。但是无论如何构造方法都应该是没有分配内存的功能的。大家看看我说的有没有道理。
作者: Mekor 时间: 2014-5-30 15:24
没好好看吧哥们。举个栗子:
class MyClass
{
DateTime Dt;//字段
....
public MyClass()//构造函数
{
Dt =DatwTime.Now;//初始化字段
}
。。。。
}
还用我说嘛?
作者: 陈君 时间: 2014-5-30 16:40
没看懂,不知道是你没理解我的意思,还是我没理解你的意思
作者: 陈君 时间: 2014-5-30 16:44
你在类里定义了一个构造函数,但是你在创建对象的时候肯定是要这样写的吧。MyClass c1=new MyClass();
这里的new才是起分配内存的功能吧?这个构造函数肯定没有再次分配内存的。
作者: Mekor 时间: 2014-5-30 19:45
C#中new后面跟的不是类名,而是类的构造函数。其实你要明白一个概念实例和指针是不可以做比较的。我仔细给你分析MyClass c1=new MyClass();的意思是说调用类的构造函数新建一个类,把相关的数据保存在类中,这跟声明变量没有区别,就是声明变量是把一个变量的值保存在内存中,而类是把很多数据保存在类中。既然这些这些数据是一起的,那c1存的是什么呢?c1存的是一个内存地址。在c或c++中我们可以叫做特殊的指针,但是c#没有指针。但是其实功能一样的。我们可以通过这个特殊指针访问内公开的方法,字段
。。。。希望对你有所帮助
作者: 陈君 时间: 2014-5-30 19:50
我 现在讨论的是究竟调用构造函数的时候有没有分配内存。究竟 是new分配了内存还是构造函数分配了内存。首先new是动态分配内存吧?
作者: Mekor 时间: 2014-5-30 20:14
我不知道你看的是那个老师的视频,但是我想如果这个老师合格的话一定会说下面这句话
初始化在构造函数完成之后发生
如果不懂可以参考C#高级编程。我刚刚重新翻了一下。。。
作者: 黑马.net 时间: 2014-5-30 20:52
这个问题,比较好,敢于质疑老师。
作者: 陈君 时间: 2014-5-30 21:22
分配 内存和初始化不是一个概念吧。
作者: fhb19890110 时间: 2014-5-30 22:18
好深奥啊
作者: 范永久 时间: 2014-5-31 17:49
没太懂,看来我还需要深入的去学习啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |