С# Получить имя экземпляра класса

Вопрос:

Я хочу, чтобы имя определенного экземпляра класса

Например, у меня есть этот код:

MyClass hello = new MyClass();

А в MyClass меня есть метод:

MyClass{
private string _name;
.
.
public string getName(){
return ...//THIS SHOULD RETURN 'hello'
}
}

Возможно ли это сделать?

Ответ №1

Зависит от того, что именно вы хотите:

Имя переменной

Имя

Самый простой способ – использовать 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.

Оцените статью
TechArks.Ru
Добавить комментарий