Получить имя экземпляра объекта без имени типа объекта в C# 4.0

Предположим, этот тип:

public class Car { } 

И я создаю экземпляр этого:

Car myCar = new Car();

Target target = new Target();
target.Model = myCar;

И это еще один тип:

public class Target {

   public object Model { get; set; }

   string GetName(){

     //Use Model and return myCar in this Example
   }

}

Как я показал в коде GetName метод должен использовать тип объекта (Model) и вернул имя экземпляра myCar в этом примере? каково ваше предложение, есть ли способ сделать это?

Обновление Как насчет этого:

public class Car {

  public string Title { get; set; }

}

И я перехожу к цели: target.Model = Car.Title

А также GetName() метод вернулся Title?

3 ответа

Решение

Нет, это невозможно. Зачем? Так как myCar это только имя для вашего Car экземпляр внутри области, для которой вы устанавливаете переменную. Что сохраняется в target.Model это ссылка на Car пример. Итак, после вашего примера кода, оба myCar а также target.Model ссылаться на тот же экземпляр CarПросто с разными именами. Сами имена довольно не важны для выполнения программы, это просто хитрость, которую мы используем, чтобы упростить разговор об экземплярах.

У объектов нет имени, если только у них нет явного способа сохранить свое имя. myCar является локальной переменной - сам объект (Car) не знает, что вы называете это по имени myCar, Проиллюстрировать:

Car myCar = new Car();
Car car2 = myCar;
Car car3 = myCar;

Теперь все три переменные относятся к одному Car,

Если вы хотите, чтобы у автомобилей были имена, вы могли бы сделать

public class Car 
{
    public string Name { get; set; }
} 

а затем назначьте и прочитайте любое имя, которое хотите.

Нет такой вещи как "имя экземпляра". То, о чем вы говорите, это название конкретной ссылки на объект; может быть много ссылок на один и тот же объект, все с разными именами. Кроме того, связывание кода и данных (т. Е. Использование имени переменной) является плохой практикой.

Если ты хочешь Car чтобы иметь какое-то имя, затем назовите его явно:

public class Car {
    public string Name { get; set; }
} 

Car myCar = new Car { Name = "myCar" };
Другие вопросы по тегам