Я хочу, чтобы имя определенного экземпляра класса
Например, у меня есть этот код:
MyClass hello = new MyClass();
А в MyClass
меня есть метод:
MyClass{
private string _name;
.
.
public string getName(){
return ...//THIS SHOULD RETURN 'hello'
}
}
Возможно ли это сделать?
Зависит от того, что именно вы хотите:
Имя переменной
Имя
Самый простой способ – использовать 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
.