访问关键字:Base 和 This

2018-10-10  本文已影响0人  三岁能抬头

基本概念

basethisC# 中被归为访问关键字,其目的就是实现继承机制的访问操作,来满足对象成员的访问,为多态机制提供更灵活的处理方式。


直接看例子

public class Action
{
    public static void ToRun(Vehicle vehicle)
    {
        Console.WriteLine("{0} is running.", vehicle.ToString());
    }
}

public class Vehicle
{
    private string name;
    private int speed;
    private string[] array = new string[10];

    public Vehicle() { }

    public Vehicle(string name, int speed)
    {
        this.name = name;
        this.speed = speed;
    }

    public virtual void ShowResult()
    {
        Console.WriteLine("The top speed of {0} is {1}.", name, speed);
    }

    public void Run()
    {
        Action.ToRun(this);
    }

    public string this[int param]
    {
        get { return array[param]; }
        set { array[param] = value; }
    }
}

首先创建了两个类一个ActionVehicle类来模拟汽车的运行。
这里可以看到Vehicle类中出现的this

this.name=name
Action.ToRun(this);

这里出现的两个this含义是一样的都代表Vehicle类本身。

public string this[int param]
{
  get { return array[param]; }
  set { array[param] = value; }
}

这里的this就是Vehicle中的string[]数组。
方法中的getset分别用于数组的 取值赋值
接下来我们创建一个Car类,具体代码如下:

public class Car : Vehicle
{
    public Car() : base("Car", 200){ }

    public Car(string name, int speed) : this() { }

    public override void ShowResult()
    {
        base.ShowResult();
        Console.WriteLine("It's a car's result.");
    }
}

创建的Car类继承Vehicle类,所有baseVehicle类,而thisCar类。
这里可以看到第一个Car的构造函数base被赋值"Car"200,并且重写了Vehicle类的ShowResult方法。
方法中在原来的基础上base.ShowResult();加上了 Console.WriteLine("It's a car's result.");
接下来在创建一个Audi类,代码如下:

public class Audi : Car
{
    public Audi() : base("Audi", 300) { }

    public Audi(string name, int speed) : this() { }

    public override void ShowResult()
    {
        base.ShowResult();
        base.Run();
        Console.WriteLine("It's audi's result.");
    }
}

创建的Audi类继承Car类,那里面的base是基类Car还是基类的基类Vehicle呢?答案是前者。
所以下面重写的ShowResult方法中的base.ShowResultCar中重写的ShowResult而不是Vehicle
最后我们在来运行下:

public static void Main(string[] args)
{
    Audi audi = new Audi();
    audi[1] = "A6";
    audi[2] = "A8";
    Console.WriteLine(audi[1]);
    audi.Run();
    audi.ShowResult();
    Console.Read();
}

输出的结果如下:

A6
Test.Program+Audi is running.
The top speed of Car is 200.
It's a car's result.
Test.Program+Audi is running.
It's audi's result.

总结

用法如下几点:

但值得关注的一点是在运行时最终指向的是最高基类的成员,也就是例子中VehicleShowResult()方法。

通用规则:

引文

[你必须知道的.NET] 第六回:深入浅出关键字---base和this

END

上一篇 下一篇

猜你喜欢

热点阅读