我是新手,c#中构造函数调用构造函数的目的是什么?仅仅是赋值的话,那所有重载的构造函数都一样了?

WYhack 2010-07-09 05:37:26
c#中构造函数调用构造函数的目的是什么?)

仅仅是赋值的话,那所有重载的构造函数都一样了?

其实我认为不是为了赋值,用this关键字调用其他构造函数,

在调用此构造函数的时候先执行被调用的构造函数,之后执行本身这个构造函数,

       
public Employee(string name): this("aaa", 5000)//调用两个参数的构造函数,真不知道this中改怎么写,索性就赋值了
{
this.name = name;
}
public Employee(string name, int salary)
{
this.name = name;
this.salary = salary;
}
//ok,开始调用构造函数实例化对象
Employee w2= new Employee("bbb");//很显然的被调用的构造函数中的属性(aaa)会被覆盖掉
//说明了什么?构造函数调用构造函数目的根本不在此




按我的理解,构造函数之间的相互调用,是为了少写部分代码(对象存在公共属性),初始化一些共同的属性,但是这些公共的属性为什么又不声明为静态的常量呢?


public Employee(string name, int salary)
{
this.educational = "Undergraduate ";//假如类中有一个学历信息,这里且认为都是本科教育程度
this.name = name;
this.salary = salary;
}
//那么在构造调用构造的时候,
public Employee(string name): this("aaa", 5000)
{
this.name = name;
}
//用这个构造实例化的对象“学历”这一属性都将是本科
//这仅仅是我的理解,可能不对,但是我认为构造函数的相互调用绝不是赋值那么简单
//OK,现在问题又出来了,既然需要所有对象都是“本科”这一学历,那么为什么不把“学历”这一属性
//直接定义为静态的且初始化的状态(“本科”)?似乎我自己又推翻了自己的结论

因为今天看的代码中有这样重载构造函数的

//算了,公司的代码不贴了



构造函数调用构造函数这种实现方式的实质是什么?为什么这么设计?我还是想进一步探索,欢迎大家共同探讨。

顺祝大家周末愉快,欢迎讨论,谢谢!
...全文
787 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
saozai01 2011-09-26
  • 打赏
  • 举报
回复
到处学习
深蓝的髹 2011-04-06
  • 打赏
  • 举报
回复
静态常量占用内存的吧~
t20100504t 2010-07-13
  • 打赏
  • 举报
回复
学习了!!!
agatone 2010-07-13
  • 打赏
  • 举报
回复
学习。。。。
加油馒头 2010-07-13
  • 打赏
  • 举报
回复
提供多用性,因为客户的要求是多种多样的
WYhack 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 vrhero 的回复:]
重载构造函数的目的是...为customer服务...

如果你没有把自己当作provider,甚至没有把自己当作customer,你当然感觉不到这样做的好处...那么你不需要重载构造函数,直到你意识到这一点以后再这样做吧...
[/Quote]

确实没有意识到!
mill_dhl 2010-07-12
  • 打赏
  • 举报
回复
学习~~~
amy_guoguo 2010-07-11
  • 打赏
  • 举报
回复
学习!!!
jetmc 2010-07-11
  • 打赏
  • 举报
回复
学习了 看看
xingjibing 2010-07-10
  • 打赏
  • 举报
回复
pengliang1982 2010-07-10
  • 打赏
  • 举报
回复
学习了.
kisswhb 2010-07-09
  • 打赏
  • 举报
回复
学习了
vrhero 2010-07-09
  • 打赏
  • 举报
回复
重载构造函数的目的是...为customer服务...

如果你没有把自己当作provider,甚至没有把自己当作customer,你当然感觉不到这样做的好处...那么你不需要重载构造函数,直到你意识到这一点以后再这样做吧...
zlchina1989 2010-07-09
  • 打赏
  • 举报
回复
楼主要明白,作为构造函数,可以进行多种情况的数据初始化,这样可以满足类对象的多种不同情况
wantalcs 2010-07-09
  • 打赏
  • 举报
回复
你把功夫练错了

public Employee(string name)
{
this.name = name;
}
public Employee(string name, int salary): this(name)
{
this.salary = salary;
}
xienb 2010-07-09
  • 打赏
  • 举报
回复
接分的~~~
阿非 2010-07-09
  • 打赏
  • 举报
回复
构造函数初始化器 是为了在构造函数中调用其它构造函数。
阿非 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wyhack 的回复:]
子类继承父类之后子类调用(子类)构造函数实例化时和先执行父类构造函数是一个道理!
[/Quote]

虽然在执行顺序上很相像,但性质迥然。

代码应该做如下修改:


public Employee(string name): this("aaa", 5000){}

public Employee(string name, int salary)
{
this.name = name;
this.salary = salary;
}

WYhack 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 jianuman 的回复:]
引用楼主 wyhack 的回复:
c#中构造函数调用构造函数的目的是什么?)

仅仅是赋值的话,那所有重载的构造函数都一样了?

其实我认为不是为了赋值,用this关键字调用其他构造函数,

在调用此构造函数的时候先执行被调用的构造函数,之后执行本身这个构造函数,


C# code

public Employee(string name): this("aaa", 50……
[/Quote]

仅仅是为了减少代码重复量麽,似乎有什么玄机在里面,今天晚上回去看看书再说
jianuMan 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wyhack 的回复:]
但是还有一个问题,用this调用构造函数时该怎么赋值?一定要复赋值?怎么给出属性类型本身默认的值(非据以的值,比如说我写的aaa,5000)

我感觉我的表达能力太有限了
[/Quote]

掉构造函数 你可以把this 看成是函数名Employee
怎么赋值 看你Employee函数参数是怎么定义的,
可以不赋值,就是你必须要有一个 无参 构造函数 Employee();
属性类型本身的默认值? 你可以添加一个无参构造函数 Employee()
int型默认是0 string 默认是null
加载更多回复(20)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧