zoukankan      html  css  js  c++  java
  • C#构造函数 -0028

    默认构造函数

    声明基本构造函数的语法就是声明一个与类同名的方法,但该方法没有返回类型:

    public class MyClass
    {
    	public MyClass()
    	{
    	}
    	// rest of class definition
    }
    

    如果没有提供任何构造函数,编译器会在后台生成一个默认的构造函数。默认的构造函数,只能把所有的成员字段初始化为标准的默认值。

    但是,如果定义了带参数的构造函数,编译器就不会自动提取默认的构造函数。

    private或protected构造函数

    可以把构造函数定义为private或Protected,这样就限制不相关的类不能访问它。

    比如定义private,

    public class MyNumber
    {
    	private int _number;
    	private MyNumber(int number) // another overload
    	{
    		_number = number;
    	}
    }
    

    在外部代码中,不能使用new关键字实例化MyNumber;但可以编写一个公有静态属性或方法,以实例化该类,比如单例模式

    public class Singleton
    {
    	private static Singleton _instance;
    	private int _state;
    	private Singleton(int state) => _state = state;
    	public static Singleton Instance => _instance ?? (_instance = new Singleton(42));
    }
    

    构造函数中调用其他构造函数

    class Car
    {
    	private string _description;
    	private uint _nWheels;
    	public Car(string description, uint nWheels)
    	{
    		_description = description;
    		_nWheels = nWheels;
    	}
    	public Car(string description): this(description, 4)
    	{
    	}
    	// ...
    }
    

    通过this关键字调用另一个构造函数,这种语法称为构造函数初始化器。this关键字调用参数最匹配的那个构造函数。

    注意,构造函数初始化器在构造函数的函数体之前执行。如:

    var myCar = new Car("Proton Persona");
    

    会先调用有两个参数的构造函数,然后调用只有一个参数的构造函数。

    静态构造函数

    C#可以给类定义无参数的静态构造函数,这种构造函数只执行一次。

    静态构造函数只能访问类的静态成员,不能访问类的实例成员。

    静态构造函数不能带任何参数,一个类也只能有一个静态构造函数。

    在C#中,通常在第一次调用类的任何成员之前,执行静态构造函数。

    public enum Color
    {
    	White,
    	Red,
    	Green,
    	Blue,
    	Black
    }
    

      

    public static class UserPreferences
    {
    	public static Color BackColor { get; }
    	static UserPreferences()
    	{
    		DateTime now = DateTime.Now;
    		if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday)
    		{
    			BackColor = Color.Green;
    		}
    		else
    		{
    			BackColor = Color.Red;
    		}
    	}
    }
    

      

  • 相关阅读:
    替换gitlab自带的Nginx,并修改仓库存储路径
    linux 内网scp 无密码传输
    centos7 安装docker及Hyperf
    VMware 安装centos 7 及自动挂载共享文件夹
    基于 Thrift + Laravel RPC 调用实现
    PHP计算两个经纬度地点之间的距离
    sql server 2008安装过程中服务器配置出错
    SQL Server2008如何设置开启远程连接
    向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
    彻底解决Google浏览器CSS居中问题
  • 原文地址:https://www.cnblogs.com/codesee/p/13154857.html
Copyright © 2011-2022 走看看