Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> run-time информация по классу 
:(
    Опции темы
Vit
Дата 17.4.2007, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Задача такова: есть простейший мой класс типа:

Код

public class PictureProperty
{
 public int id;
 public string FileName;
 public int FileSize;
 public int Height;
 public int Width;
}


Мне надо в run-time обратится к свойству класса по имени, что-нибудь типа:

Код

PictureProperty PictureProp;
....

MyVar=(int)PictureProp.НайтиСвойствоПоИмени("Height");



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 17.4.2007, 18:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Это называется reflection. Пример:
Код
using System;
using System.Reflection;

public class PictureProperty
{
    public int id;
    public string FileName;
    public int FileSize;
    public int Height;
    public int Width;
}

class Program
{
    static void Main()
    {
        PictureProperty obj = new PictureProperty();

        // 1. вначале получаем объект Type зная имя типа
        Type type = typeof(PictureProperty);
        
        // или так (если не знаем, но есть ссылка на объект):
        //type = obj.GetType();


        // 2. ищем поле по имени:
        FieldInfo field = type.GetField("Height");

        // если свойство, то юзаем GetProperty
        // если приватное - указываем 2-й параметр BindingFlags.NonPublic


        // 3. получаем значение поля по ссылке на объект
        int result = (int) field.GetValue(obj);

    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
Vit
Дата 17.4.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Цитата(mr.DUDA @  17.4.2007,  09:25 Найти цитируемый пост)
Это называется reflection. Пример:



Спасибо огромное! 


PS. И опять чуство Deja vu: то что ты написал ничем не отличается от RTTI в Дельфи кроме другого синтаксиса и немного других названий идентификаторов...

Добавлено через 3 минуты и 50 секунд
Вопрос по примеру:

int result = (int) field.GetValue(obj);


Что значит в этом контексте obj?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Naum
Дата 17.4.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(Vit @  17.4.2007,  19:28 Найти цитируемый пост)
Что значит в этом контексте obj? 

Цитата(mr.DUDA @  17.4.2007,  19:25 Найти цитируемый пост)
PictureProperty obj = new PictureProperty();

obj это конкретный экземпляр класса.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 17.4.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Мой "obj" - это твой "PictureProp".

А рефлекшн действительно похож на RTTI, только побогаче.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.