考虑以下代码:
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();
}
}