Получить имя экземпляра объекта без имени типа объекта в 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" };