Как я могу ссылаться на созданный экземпляр класса внутри метода класса? - PullRequest
0 голосов
/ 04 июня 2019

Вот мой код (только классы вне класса Main Program).

У него есть 2 класса: 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 ()?

В настоящее время метод PrintCarInfo () печатает скорость, колеса, цвет и производителя автомобиля, но я хочунапечатать имя этого конкретного экземпляра перед ними.

Что-то вроде: Console.WriteLine("Info about {0}", "Insert instance reference here")

Я хочу не указывать экземпляр в качестве параметра для метода, например car1.PrintCarInfo(car1);

Как я могу ссылаться на созданный экземпляр?(в данном случае car1)

Я пытался поиграть с object carObject;, но безуспешно.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Как написано в моих комментариях:

Я не думаю, что это сработает так легко, как вы могли бы надеяться.Существует nameof (), но вы должны использовать это при вызове PrintCarInfo, а не внутри него.Другое простое решение - дать автомобилю имя (точно так же, как у него есть скорость).

Насколько я знаю, нет способа использовать nameof внутри вызываемой функции.Я знаю, что .net имеет некоторые сумасшедшие вещи с атрибутами, но я никогда не слышал о чем-то подобном.

Оп сказал, что они дали каждому автомобилю имя, которое является прекрасным, если не лучшим решением этой проблемы.

0 голосов
/ 04 июня 2019

Используйте виртуальное свойство / метод для возврата требуемой метки. Ссылка на виртуальное свойство / метод в разделе вывода базового класса. Тогда он подберет ярлык нужного экземпляра. Пример:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...