C #: как получить объект по имени, хранящемуся в String?
14714 просмотра
4 ответа
возможно ли в C # получить объект по имени?
т.е. получить this.obj0 используя
string objectName = "obj0";
executeSomeFunctionOnObject(this.someLoadObjectByName(objectName));
Автор: disserman
Источник
Размещён: 12.11.2019 09:11
Ответы (4)
8 плюса
Нет, это не так.
У объектов нет имен - у переменных есть. На объект может ссылаться любое количество переменных: ноль, одна или несколько.
Однако вы можете получить поля (статические или переменные экземпляра) по имени (используя Type.GetField
) и получить значения этих полей (для конкретного экземпляра, если вы используете переменные экземпляра).
В зависимости от того, что вы пытаетесь сделать, вы также можете рассмотреть словарь от имен до объектов.
Автор: Jon Skeet Размещён: 30.12.2009 07:061 плюс
Нет, не все объекты имеют свойство Name (для начала).
Но вы можете хранить интересующие вас объекты в Dictionary<string, object>
. Вы также можете получить элемент управления по имени, точный метод будет зависеть от библиотеки пользовательского интерфейса.
0 плюса
Вы не можете получить доступ к объекту по имени. Используя отражение, вы можете использовать все поля и свойства класса (по имени, если хотите). Если ваш объект хранится в переменной уровня поля или в свойстве, то это даст вам то, что вы хотите:
Type myType = typeof(MyClass);
FieldInfo[] myFields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
PropertyInfo[] myproperties = myType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
Вы также можете вызвать GetField и GetProperty (в единственном числе) и передать строку, чтобы она возвращала единственный элемент, соответствующий этому имени (обязательно проверьте на нулевое значение).
Прочитайте эти страницы для получения дополнительной информации о методах отражения использования в этой ситуации:
Автор: Gabriel McAdams Размещён: 30.12.2009 07:120 плюса
Ну, я думаю, что вы ищете, это отражение.
Вы можете увидеть хороший пример здесь: http://www.switchonthecode.com/tutorials/csharp-tutorial-using-reflection-to-get-object-information
Как уже говорилось ранее - у объектов нет имен, но вы можете перемещаться по объектам, получать их тип и действовать соответственно.
Этот блог здесь показывает очень хороший пример перемещения и использования отражения.
Это должно быть хорошим началом наверняка. Наслаждайтесь!
Автор: David Salzer Размещён: 30.12.2009 07:13Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- .net Действительно ли опечатанные классы действительно предлагают преимущества?
- .net Setting Objects to Null/Nothing after use in .NET
- .net Почему я не могу иметь абстрактные статические методы в C #?
- reflection Как я могу оценить код C # динамически?
- reflection Что такое рефлексия и почему она полезна?
- reflection Как добавить отражение в приложение C ++?
- reflection Можете ли вы использовать отражение, чтобы найти имя выполняемого в данный момент метода?
- reflection Как мне получить путь к сборке, в которой находится код?