• 【c#基础】ReadOnly、构造函数(this、base)、


    ReadOnly 修饰符:防止字段在构造之后被改变。readOnly字段只能在声明的时候被赋值,或者构造函数中赋值。

    字段的初始化在构造函数之前运行。之后在会运行构造函数。

    构造函数用于初始化。

    class和struct可以重载构造函数。

    调用同个类下的重载构造函数时使用this,如果是调用继承的父类的构造函数用base.

    如:this

     1 public class Person
     2 {
     3 
     4    public int age;
     5 
     6    public int year;
     7 
     8    public Person(int age)=>age=age;
     9 
    10    public Person(int age,int year):this(age){year=year}
    11 
    12 }

    如:base:

    public class Female:Person
    {
        public int sex;
        
        public Female(int age,int sex)  :base(age)
        {
            sex=sex;
        }
    
    }     

     当同一个类型下的构造函数A调用构造函数B的时候,B先执行。被调用方先执行。

    可以把表达式传递给另一个构造函数,但表达式本身不能使用this引用,因为这个时候

    对象还没有被初始化,所以对象上任何方法的调用都会失败。但是可以使用staitc方法

    构造函数和字段的初始化顺序

    字段的初始化发生在构造函数执行之前。

    字段按照声明的先后顺序进行初始化。 

    构造函数的调用顺序:先调用System.Object类的构造函数,在按照层次结构

    由上向下进行,直到到达编译器要实例化的类为止。

    构造函数的修饰符可以是public private protect.

     c#7 DECONSTRUCTOR

    C#7 引入了deconstructor 模式

    作用基本上和构造函数相反,它会把字段反赋给一堆变量

    方法名必须是Deconstruct,有一个或者多个out参数。

    deconstructor 可以被重载

    deconstruct 也可以是扩展方法。

     索引器:

    索引器提供了一种可以访问封装了列表值或字典值的class/struct的元素的一种自然语法。

    语法很像使用数组时的语法。但是这里的索引参数可以是任何类型。

    可以使用null条件操作符。

    string s=null Console.WriteLine(s?[0]);

    实现索引器。

    需要定义一个this属性,并通过中括号指定参数。

    class test
    {
        string[] words="a bc dedfs“.Split();
        public string this[int  num]
       {
               get {return words[num];}
               set{words[num]=value;}
       }
    }
        

    一个类型可以声明多个索引器,他们的参数类型可以不同

    一个索引器可以有多个参数

    public string this[int arg1,string arg2]
    {
       get{.....;}
       set{....;}
    }

     只读索引器 如果不写set访问器,那么这个索引器就是只读的。

    c#6 后都可以使用expression-bodied语法

    public string this[int num]=>words[num];

    CLR的索引器实现

    索引器的内部会编译成get_Item和set_Item方法

    public string get_Item(int wordNum){....}
    public void set_Item(int wordNum,string value){.....}
  • 相关阅读:
    迎接2019多校联合新生训练赛(2018/12/31)
    Educational Codeforces Round 57 (Rated for Div. 2) 前三个题补题
    睡学预习(4)
    睡学预习(3)
    Python学习笔记(3)动态类型
    Maya Calendar POJ
    睡学预习(2)——数列极限
    2018-2019赛季多校联合新生训练赛第八场(2018/12/22)补题题解
    蓝桥杯入门题:Hello, world!
    蓝桥杯:P1103
  • 原文地址:https://www.cnblogs.com/SignX/p/10969979.html
Copyright © 2020-2023  润新知