这是我的代码(只是主程序类之外的类)。
它有两个类: Vehicle只有一些属性,Car继承了Vehicle并具有更多的功能,比如Car的构造函数" Car ()",打印特定汽车信息的方法"PrintCarInfo()“和car类的静态方法打印创建的Car实例的数量。
public class Vehicle
{
protected double speed;
protected int wheels = 4;
protected string color;
protected string manufacturer;
}
public class Car : Vehicle
{
static int carCounter = 0;
public Car(double speed, string color, string manufacturer)
{
this.speed = speed;
this.color = color;
this.manufacturer = manufacturer;
Interlocked.Increment(ref carCounter);
}
public void PrintCarInfo()
{
Console.WriteLine("Speed of car is {0}", speed);
Console.WriteLine("Car has {0} wheels", wheels);
Console.WriteLine("Car is {0}", color);
Console.WriteLine("Car was made by {0}", manufacturer);
Console.WriteLine();
}
public static void NumberOfCars()
{
Console.WriteLine("Number of cars created: {0}", carCounter);
Console.WriteLine();
}
在创建了一个新的汽车实例Car car1 = new Car(120, "Red", "Porsche");
之后,如何在PrintCarInfo() -method中打印该特定实例的名称?
目前,PrintCarInfo() -method打印汽车的速度、轮子、颜色和制造商,但我想在它们之前打印特定实例的名称。
类似于:Console.WriteLine("Info about {0}", "Insert instance reference here")
我希望避免将实例作为方法的参数,例如car1.PrintCarInfo(car1);
如何引用已创建的实例?(本例中为car1)
我试着尝试使用object carObject;
,但没有成功。
发布于 2019-06-04 23:55:35
使用虚拟属性/方法返回所需的标签。在基类的输出部分引用虚拟属性/方法。然后它会拿起正确的实例标签。示例:
class Program
{
static void Main(string[] args)
{
Vehicle v = new Vehicle();
Car c = new Car();
Console.WriteLine("Testing Vehicle base output");
v.PrintInfo();
Console.WriteLine("Testing Car inherited output");
c.PrintInfo();
return;
}
}
class Vehicle
{
public virtual string MyTypeName() { return "Vehicle"; }
public void PrintInfo()
{
Console.WriteLine(string.Format("Type: {0}", this.MyTypeName()));
}
}
class Car : Vehicle
{
public override string MyTypeName() { return "Car"; }
}
这将产生以下输出
Testing Vehicle base output
Type: Vehicle
Testing Car inherited output
Type: Car
https://stackoverflow.com/questions/56447035
复制相似问题