C#构造方法(构造函数)

构造方法特点:

一 ,与类同名

public class Product
    {
        public int ID { get; set; }
        public String NAME { get; set; }
        public Decimal Price { get; set; }
        public ProductType type { get; set; }
        public DateTime Birthday { get; set; }

        public Product()  //无参
        {
            ID = 1100;
            NAME = "手机";
            Price = 8888;
            type = ProductType.手机;
            Birthday = new DateTime(2019, 11, 1);
        }
    }

二,没有带返回值

三 ,无参构造函数

        public Product()  //无参
        {
            ID = 1100;
            NAME = "手机";
            Price = 8888;
            type = ProductType.手机;
            Birthday = new DateTime(2019, 11, 1);
        }

四,有参构造函数,this当前对象

        public Product(int id,string Name,int price, ProductType type)
        {
            this.ID = id;
            this.NAME = Name;
            this.Price = price;  //this当前对象
        }

不要声名重复的构造函数,私有的构造方法不能创建对象

调构造函数

            Product s1 = new Product();//无参
            Product s2 = new Product("2000","huawie", 5000,ProductType.服装, new DateTime(2019,2,3)); //有参
            Console.WriteLine(s2.ID+s2.NAME+s2.Price+ProductType.服装);
            Console.ReadLine();
            Console.WriteLine(s1.ID);

 

Constructor

什么叫构造函数(构造器&&构造方法)

官方说法 :

在一个类中创建新的对象中的特殊小程序,它创建新的对象,并且实参会接受参数用以设定实例的数量。

构造器和实例方式类似,但是与其他的方法不同,构造器没有返回类型,不会被继承,且不会有范围修饰符,构造器的函数名称一般与它所属的的同名,它承担着初始化对象数据成员并创建类不变对象的任务;在类不变象无效的时候它会失败。一个正确编写的构造器会使它生成的对象保持在一个有效状态。不可变对象必须在构造器内完但是如果提供了带参数的构造函数所有初始化。

但是如果提供了带参数的构造函数,编译器就不会去找默认的构造函数了,没有定义时他才会去找,

如果试图使用无参数的构造函数去构造实例对象,编译器就回检查出错

当然构造函数也可以用来传值,当然可以用private && protected 类型让不相关的类访问它们

 public  Mynubmer(int number)
        {
            number = _number;
        }
  var temp = new Mynuber();

 


//请提供对应的实参

以上没有定义任何的公有的或受保护类型的构造函数,这就使当前Class 无法实例化,

这样可以用一个公有的静态属性或者方法,以用来实例化该类

以下两种方法 是有效的

类做某种静态成员&&属性容器时,因此用于不会去实例它,在这种情况下,可以用static去修饰符声明类,当前修饰符,只能包含静态成员,不得实例化

希望类仅仅通过调用函数来实例化,这就是所谓的实例化类的工厂方法,。单例模式的code如下

public  class Singleton
    {
        private  static  Singleton s_ingleton;
        private int _sate;
        private Singleton(int sate)
        {
            _sate = sate;
        }
public static Singleton instance
    {
        get
        {
            return s_ingleton ?? (s_ingleton = new Singleton(45));
        }
    }
}

 

这里的THIS关键字仅仅调用最匹配的那个构造函数,注意构造函数初始化器在构造函数的函数体之前执行,

 

  
  public  class Car
    {
        private string _description;
        private uint _nWhereis;
public Car(string description,uint nWhereis)
    {
        description = _description;
        nWhereis = _nWhereis;
    }
    public Car(string description) : this(description,4)
    {
​
    }
}
var mycat=new car("dsdsada");

 

构造初始化器可以包含对同一个类另外一个构造函数调用。也可以直接包含对直接弗雷的构造函数调用,但是应该是base了初始化器不能由多个调用。

 

构造函数是多数情况下是允许重载的,一个类允许接收参数不同种类的构造器存在。如JAVA &&C#使用单个类来具体的创建和返回新的实例构造器通常被称为抽象为工厂方法,一种同样用来创建新对象,但会同时使用多个类,或者一些诸如对象池的分配方案来完成这一过程的子程序。

在C#中,静态构造器是用来初始化任何静态资料。静态构造函数也成为了类构造函数,由于类构造函数在生成的MSIL里名为“.CCOR”,因此也被称为cctor.

静态构造函数允许复杂的静态变量初始化

静态构造函数只会在第一访问被调用被访问,任何使用该类的操作)都会引发静态构造函数的执行。静态构造函数是线程安全的,并且是单例的。当用在泛型类中时,静态构造函数对于泛型的每个实例化都调用一次。静态变量也同样如此。

public class MyClass
{
    private static int _A;
​
    // Normal constructor
    static MyClass()
    {
        _A = 32;
    }
​
    // Standard default constructor
    public MyClass()
    {
​
    }
}
// Code somewhere
// Instantiating an object with the constructor above
// right before the instantiation
// The variable static constructor is executed and _A is 32
MyClass c = new MyClass();

 

 

posted @ 2019-11-22 16:28  Aquiet  阅读(3731)  评论(0编辑  收藏  举报