什么是构造函数

 在创建对象的时候,能否给不同的对象灵活地赋予不同的属性的初值,并保证没有空值的出现?这个任务可以由构造函数来完成。

构造函数是类的一种特殊方法,它的特殊性主要体现在如下的几个方面:

(1)构造函数的方法名与类名相同。
(2)构造函数没有返回类型。
(3)构造函数的主要作用是完成对类对象的初始化工作。
(4)构造函数不能由编程人员显式地直接调用。
(5)在创建一个类的新对象时,系统会自动调用该类的构造函数为新对象初始化。

下面看一个简单的例子:

protected void Page_Load(object sender, EventArgs e)
{
        student num1 = new student();
}

class student
{
        public student()
        {
            HttpContext.Current.Response.Write("学生资料:");
        }
}

结果输出:学生资料:

可见,student类的构造函数叫做student(),他没有返回类型,但是可以拥有方法的修饰符,也可以利用参数列表输入有关信息,如下面的例子就是调用构造函数时传入name参数:

protected void Page_Load(object sender, EventArgs e)
{
        student num = new student("阿会楠");
 }

class student
{
        public student(string name)
        {
            HttpContext.Current.Response.Write(name);
        }
}


构造函数的调用是在用new运算符创建类对象时由系统自动完成的,构造函数的参数传递和形实结合过程也是由系统在调用的时候同时自动完成。构造函数在程序设计中非常有用,它可以为类的成员变量进行初始化工作,很多程序员在编程过程中时常会疏忽对变量的初始化,使用构造函数可以避免这种情况,并且可以实现一次完成对类的所有实例对象的初始化,这免除了调用程序对每个实例对象都要进行初始化的繁琐工作。构造函数另一个作用是引入更多的灵活度,使得初始化工作不仅仅包括成员变量的赋值,还可以有更复杂的操作,如判断条件是否成立,若不成立跳出。

       申明类时,可以不定义构造函数,此时系统会自动为该类生成一个默认的构造函数,这个构造函数的名字与类名相同,它没有任何形式参数,也不完成任何操作。

       这里你可能会问,为什么构造函数名一定要与类名相同,你换个角度想下,编译时必须知道哪个是构造函数,采用与类同名的方式显然是最简单最合理的。

需要注意的是:我们知道构造函数是不返回值的,但你不可以加void,加了的话就不是构造函数了,而是普通函数,加了的话这个函数就不会被自动调用了,很可能会出现这样的错误:

成员名称不能与它们的封闭类型相同

 

例:

class Renlei //添加一个"人类"的 类
{
    public int Shengao; //声明一个 身高 的 整型变量

    public Renlei() //这个方法叫 构造函数(方法名 和 类名 同名的就叫构造函数)--好处是:程序一加载就要运行一次
    {
        Console.WriteLine("出生时的哭声Wawawa...");
    }

    ~Renlei() //这个方法叫 析构函数(特点:和类同名,前面加一个"~")--好处是:刚把人造出来就干掉了,好惨忍...呜呜
    {
        Console.WriteLine("俺不想死呀");
    }
    public void Shuohua() //声明了一个一出生就说话的方法(当然,小孩不会说话了,只会哭Wawawa...)
    {
        Console.WriteLine("俺的身高是" + Shengao + "厘米"); //这个方法就做一件事:就是告诉你,俺的身高是多少多少哩米
    }
}

class ShangDiZaoRen //项目的命名空间(就是告诉你,项目的名称是:ShangDiZaoRen)
{
    static void Main(string[] args) //程序主入口(这个可不能糊涂啊,没有主入口,你连门都进不去)
    {
        Console.WriteLine("大家好,我是一个人");

        Renlei Zhangsan; //给这个人取个名字先
        Zhangsan = new Renlei(); //先造一个张三
        Zhangsan.Shengao = 160; //用刚造出来的张三调用 身高变量Shengao,得到张三的身高,也就是给他赋值
        Zhangsan.Shuohua(); //用刚造出来的张三调用 说话的方法Shuohua(),也就是打印出来

        Renlei Lisi=new Renlei(); //再造一个李四
        Lisi.Shengao = 170;
        Lisi.Shuohua();        
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值