考虑以下代码:

public class Vehicle
{
    public void StartEngine()
    {
        // Code here.
    }
}

public class CityBus : Vehicle
{
    public void MoveToLocation(Location location)
    {
        ////base.StartEngine();
        this.StartEngine();
        // Do other stuff to drive the bus to the new location.
    }
}
this.StartEngine();base.StartEngine();之间有什么区别,除了在第二种情况下,不能将StartEngine方法移到CityBus类中或在ojit_code类中重写?对性能有影响吗?

最佳答案

唯一的区别是显式调用以查看您的父类,而隐式调用则通过简单继承而最终出现在同一位置。性能差异可以忽略不计。就像汉斯·帕森特(Hans Passant)所说的那样,如果在某个时候将StartEngine虚拟化,则对base.StartEngine()的调用将导致奇怪的行为。

您不需要任何一个限定词就可以找到正确的位置。明确编码时,this.StartEngine()几乎总是多余的。您可能具有将this引用间接放置在对象列表中的代码,但是它就是列表中被引用的引用:

public class Vehicle
{
    public void StartEngine()
    {
        // Code here.
    }

    //For demo only; a method like this should probably be static or external to the class
    public void GentlemenStartYourEngines(List<Vehicle> otherVehicles)
    {
       otherVehicles.Add(this);

       foreach(Vehicle v in Vehicles) v.StartEngine();
    }
}

10-01 19:11