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,现在问题又出来了,既然需要所有对象都是“本科”这一学历,那么为什么不把“学历”这一属性
//直接定义为静态的且初始化的状态(“本科”)?似乎我自己又推翻了自己的结论因为今天看的代码中有这样重载构造函数的//算了,公司的代码不贴了构造函数调用构造函数这种实现方式的实质是什么?为什么这么设计?我还是想进一步探索,欢迎大家共同探讨。顺祝大家周末愉快,欢迎讨论,谢谢!
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,现在问题又出来了,既然需要所有对象都是“本科”这一学历,那么为什么不把“学历”这一属性
//直接定义为静态的且初始化的状态(“本科”)?似乎我自己又推翻了自己的结论因为今天看的代码中有这样重载构造函数的//算了,公司的代码不贴了构造函数调用构造函数这种实现方式的实质是什么?为什么这么设计?我还是想进一步探索,欢迎大家共同探讨。顺祝大家周末愉快,欢迎讨论,谢谢!
解决方案 »
- 谁用过EXTJS呢?如何和c#结合传数据呢?高手指点一下?
- Sql Server 事务提交报错“请求没有对应的 BEGIN TRANSACTION”,但是能执行成功。
- UpdatePanel调用js
- C# winform datagridview 选中行前要判断
- 新建一个控件后怎么加入工具箱
- 放200分问一个.net注释的问题(自定义注释式样),用.net的朋友进来看看
- 关于 DataGridView 的ReMove问题
- 问一个关于datagrid的奇怪问题,请进:
- 有谁看过《C#高级编程》
- 字节buffer数据的压缩与解压缩算法
- 找不到mediaplayer控件
- 弱弱的菜鸟求教一个很简单的c#问题,不知道这段简短的代码错在哪,可以运行,但是得不到结果,已输入东西就关闭窗口,希望得到输入一个分数,输出相应的等级。急急急!!
为什么这么设计:在.net里已用partial关键字使其一个类的初始代码可以与业务逻辑代码分文件进行存放。但是在编译时编译器会自动合为一个文件。
//说明了什么?构造函数调用构造函数目的根本不在此-------------------------------------------------------------------------------
你最好先运行一下你的代码,然后在提问
//说明了什么?构造函数调用构造函数目的根本不在此----------------------------------------
的确,name被覆盖了,但salary获得了默认的一个值。
{
}
public Employee(string name, int salary)
{
this.name = name;
this.salary = salary;
}
那我问下 什么叫 被调用的构造函数中的属性(aaa)会被覆盖掉
调用构造函数时赋值this("aaa", 5000),我Employee w2= new Employee("bbb");实例化出来的对象可以得到salary=5000这一属性,但是我调用的是只有一个属性的构造函数,同时赋值为bbb,结果this("aaa", 5000)中的aaa属性没有了,但是5000依然保留,所以我推断aaa被“覆盖”了,或许我主观臆断,加上用词不当,多谢指教!
public Employee(string name): this("aaa", 5000)
{
this.name = name;
}
public Employee(string name, int salary)
{
this.name = name;
this.salary = salary;
}
Employee w2= new Employee("bbb");会先运行 Employee("aaa", 5000),然后运行Employee("bbb");
-----------------------但这个地方的说法实在是有问题...
构造函数调用构造函数是为了减少重复代码有2个构造函数
public Employee(string name);
public Employee(string name, int i)
你把大量对类初始化的代码都放在public Employee(string name, int i)
因为类初始化都相似, 这样就可以让public Employee(string name);
调用public Employee(string name, int i) 来实现初始化,而不会在public Employee(string name);
里面吧详细的初始化代码也写一遍。this 关键字调用的是该类的构造函数,base调用的是基类的构造函数。
public Employee(string name): this("aaa", 5000)
是public Employee(string name, int i) 函数体内的代码先执行,然后再执行 public Employee(string name);
函数体内的代码
jianu》》 ”这些公共的属性为什么又不声明为静态的常量呢?“
不能写成静态常量,因为静态常量是所有类成员都共享这个常量,实际上每个实例的该变量可能不相同的。
掉构造函数 你可以把this 看成是函数名Employee
怎么赋值 看你Employee函数参数是怎么定义的,
可以不赋值,就是你必须要有一个 无参 构造函数 Employee();
属性类型本身的默认值? 你可以添加一个无参构造函数 Employee()
int型默认是0 string 默认是null
虽然在执行顺序上很相像,但性质迥然。代码应该做如下修改:
public Employee(string name): this("aaa", 5000){} public Employee(string name, int salary)
{
this.name = name;
this.salary = salary;
}
{
this.name = name;
}
public Employee(string name, int salary): this(name)
{
this.salary = salary;
}