this

用于引用类的当前实例,也包括继承而来的方法,通常可以隐藏this:

  • 限定被相似的名称隐藏的成员
  • 将对象作为参数传递到其他方法
  • 声明索引器

     

例如:

// 引入使命空间System
using System;
    // 声明命名空间CallConstructor
namespace CallConstructor
{
    // 声明类Car
        public class Car
{
    // 在Car类中:
    // 声明一个非静态的整型变量petalCount,初始值为0
    // 未用Static声明的变量叫做静态变量,非静态成员属于
    类的实例,我们只能在调用类的构造函数对类进行实例化后才能通过所得的实例加"."来访问
int petalCount = 0;
    // 声明一个非静态的字符串变量s,初始值为"null";
    // 注意:s = "null"与s = null是不同的
    String s = "null";
    // Car类的默认构造函数
Car(int petals)
{
    // Car类的默认构造函数中为 petalCount 赋值为传入的参数petals的值
    petalCount = petals;
    // 输出petalCount
    Console.WriteLine("Constructor w/int arg only,petalCount = " + petalCount);
}
    // 重载Car类的构造函数
    // : this(petals) 表示从当前类中调用petals变量的值来作为构造函数重载方法Car(String s, int petals)的第二个参数
Car(String s, int petals)
: this(petals)
{
    // 在构造函数中为s赋值
    // 非静态成员可以在构造函数或非静态方法中使用this.来调用或访问,也可以直接打变量的名字,因此这一句等效于s = s,但是这时你会发类的变量s与传入的参数s同名,这里会造成二定义,所以要加个this.表示等号左边的s是当前类自己的变量
    this.s = s;
    Console.WriteLine("String & int args");
}
    // 重载构造函数,: this("hi", 47) 表示调Car(String s, int petals) 这个重载的构造函数,并直接传入变量"hi"和47
Car()
: this("hi", 47)
{
    Console.WriteLine("default constructor");
}
public static void Main()
{
    Car x = new Car();
    Console.Read();
}
}
}

简而言之,this可以定义当前类亦或同类构造函数的顺序,若以上述代码为例子,输出有:code1.png

base

用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器中:

  • 调用基类上已被其他方法重写的方法。
  • 指定创建派生类实例时应调用的基类构造函数。

      base常用于,在派生类对象初始化时和基类进行通信。 

      base可以访问基类的公有成员和受保护成员,私有成员是不可访问的。

在多层继承中,base可以指向的父类的方法有两种情况:一是有重载存在的情况下,base将指向直接继承的父类成员的方法;而没有重载存在的情况下,base可以指向任何上级父类的公有或者受保护方法。 

image.png

最后修改:2022 年 06 月 29 日
打点赏咯~