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

Вопрос: Я хочу, чтобы имя определенного экземпляра класса Например, у меня есть этот код: MyClass hello = new MyClass(); А в MyClass меня есть метод: MyClass{ private string _name; . . public string getName(){ return ...//THIS SHOULD RETURN 'hello' } } Возможно ли это сделать? Ответ №1 Зависит от того, что именно вы хотите: Имя

Вопрос:

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

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

MyClass hello = new MyClass();

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

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

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

Ответ №1

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

Содержание

  1. Имя переменной
  2. Имя
  3. Обнаружение метода
  4. Архитектурное решение
  5. classname (Не имя переменной!)
  6. Имя
  7. отражение

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

Имя

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

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