| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3568 人关注过本帖
标题:【C#探讨】1:构造函数
只看楼主 加入收藏
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
结帖率:100%
收藏
 问题点数:0 回复次数:31 
【C#探讨】1:构造函数
想出一个点子:做个专栏,专门探讨学习中遇到的问题,比较经典的问题,何谓经典?就是人人都可以参与,各抒己见,但是又值得深究的问题。以便增加论坛的互动性。觉得话题好的兄弟,可以把帖子通知版主,由版主置顶,可以吸引人气,也不会沉底,但是请不要把题目往这一甩,就让别人帮你忙活去,起码也要有自己的见解先帖出来,这样,版主看到,才回给你置顶,话题最好也不要太偏,那样可加入的人就少。为了论坛的美观,置顶帖子不超过3个话题。
    这里我就带个头,弄第一个话题:类的构造函数的探究,权做抛砖引玉。任何类都是从构造函数开始,咱们的探讨专栏,也就从此开始了。
    前些时看到有个兄弟出了几个题目,有这么个问题,能否在类中显式调用构造函数,我也一下子拿不准,偶然看C#高级编程里面有这么一段,吸引了我的注意。在类里可以通过base(),this()调用基类和本身的构造函数。
程序代码:
class AAA
{
        public AAA()
        {
        }
}
class BBB:AAA
{
       public BBB()
       :base()           //此为BBB基类AAA的构造函数
       {
        }
}


可能有兄弟会问,不这样也可以啊,平时没这样。是的,不写那句也可以,但是前提是基类的构造函数是无参的,当有参数时,就必须这么写了,得通过base(参数)往基类的构造函数里头传参数,否则就会报错,大家都知道构造函数执行顺序是从上到下的。
    在此,我有个疑问,base()是调用基类的构造函数,this()是调用自己的构造函数,这或许算是显式调用构造函数吧,但是我以为this指的一般都是当前对象,但是构造函数是以类名命名的,类来构造对象的方法,叫做构造函数,岂可以用this()来指代构造函数呢?那不成了对象生成对象了。但是在编译器中写this()又确实是识别的,还有提示是当前类的构造函数,请兄弟们积极讨论下,看到底该怎么来理解。

[[it] 本帖最后由 小仙 于 2008-10-8 19:46 编辑 [/it]]
搜索更多相关主题的帖子: 函数 构造 探讨 
2008-10-08 19:41
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
沙发都没人占?呃。。。刚去外面晃了晃,发现咱们C#论坛的人气以发帖数来算的话,是排在第2的100,仅比C语言版块123少23帖而屈居第2,很好嘛。至于水区,咱们就不和它比了。大家踊跃讨论下啊,我这个探讨专栏怎么样的。。不要打击我的工作积极性啊。


仁者乐膳,智者乐睡。我都爱~
2008-10-08 20:00
gghao
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-8-31
收藏
得分:0 
构造函数
生类必须调用基类的构造函数(默认或显式),但不继承基类的构造函数。

任何一个类都有构造函数,如果你不写构造函数,系统会帮派生类生成一个这样的构造函数:   
classs    BBB   :    AAA   
{   
      public    BBB   ()   :   base   ()   {}   
}      
但这只是默认的构造函数,如果你写了一个任何形式的构造函数,那么系统都不会为你生成这个构造函数。所以如果你在派生类中不写构造函数,而又在基类中有构造函数但没有无参数且是public或者protected的构造函数,就会报错。实际上因为构造函数不能通过类的实例来调用,所以说继不继承就已经意义不大了。

    class AAA
    {      
        protected string str;
        public string Str
        {
            get { return str; }
            set { str = value; }
        }
        public AAA(string s)
        {
            str = s;
        }
        public AAA()
        {
            str = "abc";
        }
    }
    class BBB : AAA
    {        
    }
    class Class1
    {
        static void Main()
        {
            BBB b = new BBB();
            Console.WriteLine(b.Str);//输出abc
         
        }
    }
2008-10-09 00:05
duanchangren
Rank: 1
等 级:新手上路
威 望:1
帖 子:252
专家分:0
注 册:2008-7-26
收藏
得分:0 
没人回帖是不是不支持版主的想法,没看懂也看回条支持一下
我顶````
2008-10-09 00:06
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
回复 4# duanchangren 的帖子
你真让我为难了。。按说你是个勇敢的人啊。呵呵。


仁者乐膳,智者乐睡。我都爱~
2008-10-09 06:56
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
回复 3# gghao 的帖子
“如果你写了一个任何形式的构造函数,那么系统都不会为你生成这个构造函数。”呃。。我说,哥们,可能是我晚上失眠了吧,3点就醒了一直没睡着,怎么看你这句话这么费劲呢,眼睛都瞅花了。你这句倒是重点“实际上因为构造函数不能通过类的实例来调用,”但在类里头,确实是可以用到this()来显示构造函数的,这就是我此帖的话题,你好象没有抓住重点啊。等待楼下补充~


仁者乐膳,智者乐睡。我都爱~
2008-10-09 08:01
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
呃。。。说个症状,不晓得是不是走火入魔的征兆:躺在床上睡不着,手脚冒汗,辗转反侧,努力想让大脑冷静下来,可是却越想越多,甚至还发出了光驱读盘时高速旋转声都依稀可闻,就象是想关机,却出现死程序,选择强行结束都不行的那种情况,人的意识很清醒,就是混身没劲,坐起来之后,又浑浑噩噩的。还好一般一个月就那么几次,要不我真要羽化登仙了。


仁者乐膳,智者乐睡。我都爱~
2008-10-09 08:07
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 
恭喜你...你已得到软件园状态的精髓

有实力才会有魅力 实力来自坚持不懈的努力
2008-10-09 08:52
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
回复 8# 师妃暄 的帖子
难道你也深谙此道?我以前还没这个情况,还好这几天有假,一觉睡到自然醒,前天是9点半起来,昨天是11点半起来,人家都往软件园里头出来,我从外面进去,看着我的人都很诧异。


仁者乐膳,智者乐睡。我都爱~
2008-10-09 08:58
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
我住的那附近有个小学,早上打铃,唱国歌,就是不让我睡懒觉。那些小学生也够厉害的,每天起的和我差不多早平时。


仁者乐膳,智者乐睡。我都爱~
2008-10-09 08:59
快速回复:【C#探讨】1:构造函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014094 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved