这是我的代码(只是Main Program类之外的类)。
它有2个类:具有一些属性的Vehicle和继承了Vehicle并具有更多功能的Car,例如Car“ 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实例:Car car1 = new Car(120, "Red", "Porsche");
之后,如何在PrintCarInfo()-method中打印该特定实例的名称?
当前,PrintCarInfo()方法可打印汽车的速度,车轮,颜色和制造商,但我想在其之前打印该特定实例的名称。
类似Console.WriteLine("Info about {0}", "Insert instance reference here")
我想避免将实例作为方法的参数,例如car1.PrintCarInfo(car1);
如何引用创建的实例? (在这种情况下为car1)
我尝试玩object carObject;
,但没有成功。
答案 0 :(得分:1)
我在评论中写道:
我认为这不会像您期望的那样容易。有nameof(),但您必须在调用PrintCarInfo时使用它,而不是在其中使用它。另一个简单的解决方案是给汽车起一个名字(就像它有速度一样)。
据我所知,在调用的函数内无法使用nameof。我知道.net有一些带有属性的疯狂东西,但我从未听说过这样的东西。
Op说,他们给每辆车起了个名字,如果不是解决这个问题的最佳方案,那将是一个很好的选择。
答案 1 :(得分:0)
使用虚拟属性/方法返回所需的标签。在基类的输出部分中引用虚拟属性/方法。然后它将拾取正确实例的标签。 示例:
var cmark = {
x: 0,
y: 0,
rad:0,
clr: null,
setArc: function () {
ctx.beginPath();
ctx.arc(this.x, this.y, this.rad, 0, Math.PI * 2, true);
ctx.fillStyle = this.clr;
ctx.fill();
}
};
[].forEach.call(centroids, (c) => {
cmark.x = c[0];
cmark.y = c[1];
cmark.clr = '#0B6623';
cmark.rad = 25;
cmark.setArc();
});
});
这将导致以下输出
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"; }
}