(C# 类二)

简介

  主要记录的是面向对象编程中,类的解构器,方法的使用,索引器和终结器及相关的注意事项

面向对象编程

类 第二篇

4. 解构器

要求C# 7.0以上

这里的解构器可以看做是构造器的反向操作,解构器可以把一个对象赋值给一个元组

解构器必须要下面这种形式,必须是Deconstruct这个名字,必须要有out传出参数。

public void Deconstruct(out string? name,out int age)

internal class Person
{
    private string? name;
    private int age;
    public Person()
    {
        name = "zhang";
        age = 18;
    }

    public Person(string? name,int age)
    {
        this.name = name;
        this.age = age;
    }

    public string? Name { get => name; set => name = value; }
    public int Age { get => age; set => age = value; }

    //必须要
    public void Deconstruct(out string? name,out int age)
    {
        name = Name;
        age = Age;
    }

    public override string ToString()
    {
        return this.name+","+this.age;
    }
}
static void Main(string[] args)
{
    Person p = new Person();
    (string? name, int age) = p;
    Console.WriteLine(name+","+age);
    Console.ReadLine();
}
//输出
zhang,18

5.方法

方法可以用以下修饰符修饰

  • 静态修饰符:Static
  • 访问修饰符:public , internal , private , protected
  • 继承修饰符:new , virtual , abstract, override , sealed
  • 部分方法修饰符: partial
  • 非托管代码修饰符:unsafe , extern
  • 异步代码修饰符:async

其他比如重载方法,使用 ref 引用传递,过程略。

6. 事件

需要搭配委托使用,暂略。

7. 索引器

索引器一般是数组用的东西,但是类中也有这个方法。

简单来说,类的索引器就是重写 [ ] 中括号这个

internal class PersonIntroduce
{
    private string? content;
    private string[]? conts;

    public PersonIntroduce()
    {
        content = "this is introduce";
        conts = content.Split();
    }

    public PersonIntroduce(string content)
    {
        this.content = content;
        conts = content.Split();
    }

    public string this[int index]
    {
        get { return conts[index]; }
        set { conts[index] = value; }
    }
}
static void Main(string[] args)
{
    PersonIntroduce pi = new PersonIntroduce();
    string str = pi[1];
    Console.WriteLine(str);
    pi[1] = "times";
    Console.WriteLine(pi[1]);
    Console.ReadLine();
}
//输出
is
times

8. 终结器

终结器(Finalizer),在垃圾回收器回收未引用的对象占用的内存前调用。

终结器可以被 非托管代码修饰符 unsafe 修饰。

internal class PersonIntroduce
{
    public PersonIntroduce()
    {
        Console.WriteLine("开始");
    }
    ~PersonIntroduce(){
        Console.WriteLine("结束了");
    }
}
static void Main(string[] args)
{
    PersonIntroduce pi = new PersonIntroduce();
   
}