C#中的构造函数
什么是构造函数?
构造函数,是⼀种特殊的⽅法。主要⽤来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符⼀起使⽤在创建对象的语句中。特别的⼀个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。写⼀个类,如果没有写任何的构造函数,那么这个类有⼀个默认的⽆参数的构造函数。如果写了构造函数,那么在这个类中就有两个构造函数,⼀个默认的,⼀个是⾃⼰写的,不过,⾃⼰写了构造函数,之前默认的那个构造函数就不能⽤了,如果还想⽤之前的那个默认的构造函数,就必须再重新写⼀个⽆参数的构造函数。
特征
1.构造函数的命名必须和类名完全相同。
2.构造函数的功能主要⽤于在类的对象创建时定义初始化的状态。它没有返回值,也不能⽤void来修饰。这就保证了它不仅什么也不⽤⾃动返回,⽽且根本不能有任何选择。⽽其他⽅法都有返回值,即使是void返回值。尽管⽅法体本⾝不会⾃动返回什么,但仍然可以让它返回⼀些东西,⽽这些东西可能是不安全的;
3.构造函数不能被直接调⽤,必须通过new运算符在创建对象时才会⾃动调⽤;⽽⼀般的⽅法是在程序执⾏到它的时候被调⽤的;
4.当定义⼀个类的时候,通常情况下都会显⽰该类的构造函数,并在函数中指定初始化的⼯作也可省略此默认构造函数是不带参数的。⽽⼀般的⽅法不存在这⼀特点;
5.当⼀个类只定义了私有的构造函数,将⽆法通过new关键字来创建其对象,当⼀个类没有定义任何构造函数,C#编译器会为其⾃动⽣成⼀个默认的⽆参的构造函数。
6.构造函数有回滚的效果,构造函数抛出异常时,构造的是⼀个不完整对象,会回滚。
作⽤
默认的构造函数和⾃⼰写的构造函数都是实例化对象,初始化数据的,默认构造是说所有的类都从祖先object那继承了空参的构造⽅法,你不写与写空参构造都存在,⽽有参数的构造⼀般是⾃⼰写的,写就有不写就没有,它的作⽤和空参的⼀样,只是它⾥⾯可以有参数。构造函数可以给字段赋值,当不能赋值的时候,构造函数解决了赋值⿇烦的问题。说了这么多,是不是晕乎乎的,让我们来看⼀个简单的例⼦,看完这个例⼦就彻底明⽩什么是构造函数了。我们创建⼀个student类,在类中写字段和⽅法。使⽤⼀个简单的构造函数定义了名为 student的类,然后使⽤ new运算符来实例化该类。在为新对象分配内存之后,new运算符⽴即调⽤ student 构造函数。
显⽰⼀个⼈的姓名,性别和年龄。
private string _name;//字段
//属性
public string Name
{
get { return _name; }//读值
set { _name = value; }//写值
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
<pre name="code" class="csharp"> //say⽅法
public void Say()
{
Console.WriteLine("我叫{0},今年{1}岁了,是{2}⽣" ,this .Name ,this.Age ,this.Gender );
}
<span ><strong>下⾯是在主函数中调⽤类中的⽅法</strong></span>
static void Main(string[] args)
{
student zsStu = new student();//实例化⼀个类
zsStu.Name = "张三";//赋值
zsStu.Age = 18;
zsStu .Gender ='⼥';
zsStu.Say();
zsStu.Score();
//总感觉代码⽐较多,好像有冗余
Console.WriteLine(" ");
Console.WriteLine("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
Console.WriteLine(" ");
student xlStu = new student();
xlStu.Name = "⼩兰";
xlStu.Age = 16;
xlStu .Gender ='⼥';
xlStu.Say();
xlStu.Score();
Console.ReadKey();
是不是总感觉在主函数中调⽤的代码有点多啊,好像存在冗余现象。
<span > 这时就出现了构造函数,它的出现解决了赋值⿇烦的问题</span>
public class person
{
//是类的构造⽅法
public person(string name,char gender,int age)
{
this._name = name;//指⽰代词
this._gender = gender;
this._age = age;
}
//重新写的⽆参构造函数
public person()
{
}
//构造函数的重载
private string _name;
public string Name
{
get { return _name; }
//set { _name = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
//set { _gender = value; }
}
private int _age;
public int Age
{
get { return _age; }
/
/set { _age = value; }
}
public void Say()
{
Console.WriteLine("我叫{0},今年{1}岁了,是{2}⽣", this.Name, this.Age, this.Gender);
}writeline函数
}
<span > 然后我们在主函数中进⾏调⽤</span>
<pre name="code" class="csharp"> static void Main(string[] args)
{
person per = new person("张三",'男',18);//利⽤构造函数给⾥⾯的字段赋值
per.Say();
Console.ReadKey();
}
轻轻松松就把很繁琐的代码进⾏了巧妙的转化,利⽤构造函数给⾥⾯的字段赋值。上⾯的代码中就出现了构造函数的重
载,我们先简单的了解⼀下,
⼩结
学习永⽆⽌境,因为C#视频太多了,看到⼀半就再也不想看了,现在想想,⼀个⼩⼩的构造函数都能做到如此强⼤,使我们的程序更加的便捷,所以我们更要不断的去认识,去接触我们不知道的事物,并且很好的掌握它,这才是我们现阶段应该做的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论