Вопрос:
Я хочу, чтобы имя определенного экземпляра класса
Например, у меня есть этот код:
MyClass hello = new MyClass();
А в MyClass меня есть метод:
MyClass{ private string _name; . . public string getName(){ return …//THIS SHOULD RETURN ‘hello’ } }
Возможно ли это сделать?
Ответ №1
Зависит от того, что именно вы хотите:
Содержание
- Имя переменной
- Имя
- Обнаружение метода
- Архитектурное решение
- classname (Не имя переменной!)
- Имя
- отражение
Имя переменной
Имя
Самый простой способ – использовать nameof (как показано в другом ответе):
var varName = new MyClass(); return nameof(varName); // will return «varName»
самое главное – это время компиляции будет преобразовано в «varName» поэтому у вас есть преимущества проверки времени компиляции, но скорость выполнения статической строки.
Обнаружение метода
Другой способ сделать это – это вывести метод и превратить его в лямбда-эксперсию. В этом lambda experssion вы можете найти новое объявление переменной со строительством этого класса. а затем получить имя этих переменных. Мне жаль, но у меня мало опыта, чтобы показать вам пример этого. Я хотел бы, чтобы вы ссылались на дублирующийся пост: получение имен локальных переменных (и параметров) во время выполнения через лямбда-выражения
Я не уверен, почему вы хотите это сделать. так как это о том, как ваш код называется/запрограммирован, что не имеет большого значения во время выполнения. (тогда это имеет значение только, как оно себя ведет.)
Я бы посоветовал вам создать анализатор кода вместо компилятора roslyn и добавить его в свой проект.
Архитектурное решение
Единственный способ, которым вы могли бы получить описанное вами поведение, – дать имя переменной классу в конструкторе:
var myVar = new MyClass(nameof(myVar)); var var2 = myVar; var2.GetName(); // returns «myVar» public class MyClass { public MyClass(name){ this.createdWithName = name; } public string GetName(){ return this.createdWithName; } }
classname (Не имя переменной!)
Более удобная вещь, чтобы хотеть, заключалась бы в том, чтобы получить имя класса. и вы можете сделать это следующими способами:
Имя
return nameof(MyClass); //will compile to «MyClass»
Таким образом, время компиляции у вас есть роскошь MyClass для проверки типов и для простого рефакторинга. Но время выполнения всегда будет возвращать “MyClass”.
отражение
return this.GetType().Name;
Будет возвращено имя этого класса. Это, по сравнению с именем, не всегда возвращает “MyClass”, но фактически возвращает класс reall экземпляра. Например, если у вас есть подкласс MySubClass это вернет MySubclass.