A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈君 金牌黑马   /  2014-5-30 13:21  /  1410 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈君 于 2014-6-1 09:34 编辑

***构造方法严格意义上讲,只完成:分配内存空间,创建对象,将对象的字段初始化为null0false(默认的构造方法)。
以上是视频里对构造方法所完成工作的介绍。
但是我认为这里讲错了
因为我们每次调用构造函数的时候都要用new。而new的作用是动态分配内存,所以这里构造函数应该是没有分配内存空间的作用的。
或者说new分配好内存后,是通过构造方法来把各各分散的内存块联系到一个对象里面。但是无论如何构造方法都应该是没有分配内存的功能的。大家看看我说的有没有道理。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

10 个回复

倒序浏览
没好好看吧哥们。举个栗子:
class MyClass
{
        DateTime  Dt;//字段
        ....
        public MyClass()//构造函数
        {
               Dt =DatwTime.Now;//初始化字段
        }
        。。。。
}

还用我说嘛?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
Mekor 发表于 2014-5-30 15:24
没好好看吧哥们。举个栗子:
class MyClass
{

没看懂,不知道是你没理解我的意思,还是我没理解你的意思
回复 使用道具 举报
Mekor 发表于 2014-5-30 15:24
没好好看吧哥们。举个栗子:
class MyClass
{

你在类里定义了一个构造函数,但是你在创建对象的时候肯定是要这样写的吧。MyClass c1=new MyClass();
这里的new才是起分配内存的功能吧?这个构造函数肯定没有再次分配内存的。
回复 使用道具 举报
陈君 发表于 2014-5-30 16:44
你在类里定义了一个构造函数,但是你在创建对象的时候肯定是要这样写的吧。MyClass c1=new MyClass();
这 ...

C#中new后面跟的不是类名,而是类的构造函数。其实你要明白一个概念实例和指针是不可以做比较的。我仔细给你分析MyClass c1=new MyClass();的意思是说调用类的构造函数新建一个类,把相关的数据保存在类中,这跟声明变量没有区别,就是声明变量是把一个变量的值保存在内存中,而类是把很多数据保存在类中。既然这些这些数据是一起的,那c1存的是什么呢?c1存的是一个内存地址。在c或c++中我们可以叫做特殊的指针,但是c#没有指针。但是其实功能一样的。我们可以通过这个特殊指针访问内公开的方法,字段
。。。。希望对你有所帮助
回复 使用道具 举报
Mekor 发表于 2014-5-30 19:45
C#中new后面跟的不是类名,而是类的构造函数。其实你要明白一个概念实例和指针是不可以做比较的。我仔细给 ...

我 现在讨论的是究竟调用构造函数的时候有没有分配内存。究竟 是new分配了内存还是构造函数分配了内存。首先new是动态分配内存吧?
回复 使用道具 举报
Mekor 中级黑马 2014-5-30 20:14:03
7#
陈君 发表于 2014-5-30 19:50
我 现在讨论的是究竟调用构造函数的时候有没有分配内存。究竟 是new分配了内存还是构造函数分配了内存。 ...

我不知道你看的是那个老师的视频,但是我想如果这个老师合格的话一定会说下面这句话

初始化在构造函数完成之后发生

如果不懂可以参考C#高级编程。我刚刚重新翻了一下。。。
回复 使用道具 举报
这个问题,比较好,敢于质疑老师。
回复 使用道具 举报
陈君 金牌黑马 2014-5-30 21:22:37
9#
Mekor 发表于 2014-5-30 20:14
我不知道你看的是那个老师的视频,但是我想如果这个老师合格的话一定会说下面这句话

初始化在构造函数完 ...

分配 内存和初始化不是一个概念吧。
回复 使用道具 举报
好深奥啊
回复 使用道具 举报
没太懂,看来我还需要深入的去学习啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马