zoukankan      html  css  js  c++  java
  • C#编程(十四)----------构造函数

    原文链接:http://blog.csdn.net/shanyongxu/article/details/46501683

    构造函数

    所谓的构造函数就是和类名重名的且没有返回值的方法.

    class Person

    {

    public Person()//构造函数

    {

    }

    }

    一般情况下,如果没有提供构造函数,编译器会在后台创建一个默认的无参数的构造函数.这是一个非常基本的构造函数,他只能吧所有的成员字段初始化为标准的默认值(例如,引用类型为空引用,数值数据类型为0,bool为false).

    构造函数可以重载,只要他们的签名不同即可.

    class Person

    {

    public Person()//构造函数

    {

    }

    public Person(int number)

    {

    }

    }

    但是有一点需要注意的是,如果提供了带参数的构造函数,编译器就不会自动的提供默认的构造函数,只有在没有定义任何构造函数时,编译器才会自动的提供默认的构造函数.也就是说,只要有自己定义的构造函数,不管有没有参数,系统都不会提供默认的那个基本的构造函数了.

    例如:

    class Person

    {

    private int age;

    public Person(int age)

    {

    this.age=age;

    }

    }

    如果想要创建对象:Person person=new Person()//这是错误的,因为没有无参数的构造函数.

    一般使用this关键字区分成员字段和同名的参数.

    如果把构造函数的修饰符编程private或者protected,这样相关的类也不能访问他们:

    public class Person

    {

    private int age;

    private Person(int age)

    {

    this.age=age;

    }

    }

    如果声明的构造函数为私有的没那么外部无法通过使用new关键字来创建该类的对象(但是可以在Person中编写一个公用静态属性和方法,用来实例化该类).在以下两种情况下是有用的:

    1.类仅用作某些静态成员或属性容器,因此永远不会实例化它

    2.希望类仅通过调用某个静态成员函数来实例化.

    静态构造函数是C#的一个新特征,这种构造函数只执行一次,而前面的构造函数是实例构造函数,只要创建类的对象,就会执行他.

    class Person

    {

    static Person()

    {

    }

    }

    静态构造函数的存在意义是,类有一些惊天字段火属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性.

    注意静态构造函数没有访问修饰符,其他的C#代码从来不调用他,但是在加载类时,从石油.NET运行库调用它,所以像public和private这样的访问修饰符就没有任何意义,同样,静态构造函数也不能有任何参数,一个类只能有一个惊天构造函数,显然静态的构造函数只能访问类的静态成员,不能访问类的实例成员.静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

    class SimpleClass {     // Static constructor     static SimpleClass()     {         //     } }

    构造函数里调用其他的构造函数(构造函数初始化器)

    class Car

            {

                private string description;

                private int ID;

                public Car(string description, int ID)

                {

                    this.description = description;

                    this.ID = ID;

                }

                public Car(string description)

                    : this(description, 4)

                {

                    this.description = description;

                }

            }

    这里,this关键字仅调用参数最匹配的那个构造函数.

  • 相关阅读:
    JDK_win10环境下安装JDK8时点击下一步没反应的解决办法
    Pytest_在jenkins中使用allure报告(13)
    Spring Boot 实现接口幂等性的 4 种方案
    Linux yum 安装Java和MySQL
    IntelliJ IDEA 控制台中文乱码解决方案
    Linux CentOS 配置Yaf框架
    NCF 如何导入Excel数据
    NCF WebApi中 Controller的全解析
    NCF 如何通过WebApi实现前后端分离
    NCF 如何设置接口跨域访问
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7602146.html
Copyright © 2011-2022 走看看