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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钱灿 中级黑马   /  2012-7-8 20:29  /  2062 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钱灿 于 2012-7-8 23:46 编辑

类:
    public class BaseClass
    {
        public BaseClass()
        {
        }
        public BaseClass(int i)
        {
        }
    }

    public class MyClass : BaseClass
    {
        public MyClass() : this(2, 3)
        {
        }
        public MyClass(int i)
        {
        }
        public MyClass(int i, int j) : base(i)
        {
        }
    }

实例化:
MyClass myObj = new MyClass(1, 2);
他们的执行序列是怎么一回事???
---------------------------------------------

测试了下……结果是public BaseClass(int i)与public MyClass(int i, int j)调用过……参数i为1,j为2……那么public MyClass() : this(2, 3)有啥子用呢?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

10 个回复

正序浏览
古古头 发表于 2012-7-9 10:46
有啊,你还可以在MyClass()里面写其它代码啊
比如:
public MyClass():this(2,3)

可是我试过了的……没有效果……
回复 使用道具 举报
钱灿 发表于 2012-7-9 10:40
也就是说这个东东没有被调用过?感觉好奇怪……
public MyClass() : this(2, 3)
        {

有啊,你还可以在MyClass()里面写其它代码啊
比如:
public MyClass():this(2,3)
{
Console.Write("这里是无参构造");
}
回复 使用道具 举报
古古头 发表于 2012-7-9 10:37
它相当于
public MyClass()
{

也就是说这个东东没有被调用过?感觉好奇怪……
public MyClass() : this(2, 3)
        {
        }
回复 使用道具 举报
钱灿 发表于 2012-7-9 10:29
一样的道理,你调用MyClass(int,int)就相当于先执行BaseClass(int)再执行MyClass(int,int)自身的内容。
- ...

它相当于
public MyClass()
{
MyClass(2,3);
}
他是为了方便调用者,也许你初始化数据的时候大部分都是要调用MyClass(2,3)的
那么MyClass()提供了一个默认的初始化
回复 使用道具 举报
小高 发表于 2012-7-9 10:26
实例化对象  myObjec   调用MyClass  类有参构造方法  
public MyClass(int i, int j) : base(i)   其中bas ...

我测试过了……
下面这个构造为什么没起到啥作用……
public MyClass() : this(2, 3)
{
}
回复 使用道具 举报
古古头 发表于 2012-7-9 10:21
当你调用MyClass()这个构造方法的时候,等价于先执行MyClass(int,int)再执行MyClass()自身的内容,
一样的 ...

一样的道理,你调用MyClass(int,int)就相当于先执行BaseClass(int)再执行MyClass(int,int)自身的内容。
------------------------------------------------------------------------------
那这个呢……没起到啥作用……
public MyClass() : this(2, 3)
{
}
回复 使用道具 举报
实例化对象  myObjec   调用MyClass  类有参构造方法  
public MyClass(int i, int j) : base(i)   其中base(i)  表示调用父类
BaseClass  带一个参数的构造方法
BaseClass(int i)
你在各个类的构造方法里面输出一条打印语句看结果就知道了   在java中一般都是先创建父类对象在创建子类对象。。   不过你的才C#代码,自己捣腾一下就知道了。
回复 使用道具 举报
当你调用MyClass()这个构造方法的时候,等价于先执行MyClass(int,int)再执行MyClass()自身的内容,
一样的道理,你调用MyClass(int,int)就相当于先执行BaseClass(int)再执行MyClass(int,int)自身的内容。
而如果你后面不加:xxx的话,像
        public MyClass(int i)
        {
        }
这样,它实际相当于
        public MyClass(int i):BaseClass()
        {
        }
也就是说,除了Object的构造方法外,所有的构造方法的执行都需要先执行父类的一个构造方法或本类的其它重载构造方法。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 钱灿 于 2012-7-8 23:03 编辑
小高 发表于 2012-7-8 22:22
class a
{
    public a():this(1)//当调用无参数构造函数的时候使用1调用下面那个重载

public a():this(1)//当调用无参数构造函数的时候使用1调用下面那个重载

————————————
调用过后……还会不会接着调用public a(){}这个呢……我看网上是这个样子……有点晕……

————————————
我理解的顺序是public BaseClass(int 1) -->public MyClass(int 1, int 2) -->public MyClass(int 2, int 3) -->最后public MyClass()
不知道对不对……

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
class a
{
    public a():this(1)//当调用无参数构造函数的时候使用1调用下面那个重载
   {}
   public a(int i)
   {}
}

base的意思差不多,,不过不是调用这个类的,而是调用父类的构造函数

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马