Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
jenokizm
21 / 37 / 14
Регистрация: 27.03.2014
Сообщений: 754
1

Рефлексия, получить содержание поля статического класса

09.06.2015, 21:10. Просмотров 1269. Ответов 5
Метки нет (Все метки)

C#
1
2
3
4
static class Messange
        {
            public static readonly string mes = "Привет";
        }
необходимо только по имени класса из строки!
пробывал так:
C#
1
2
3
4
Type myType = Type.GetType("Messange"); //typeof(Messange);             
                // Get the PropertyInfo object by passing the property name.
                var myPropInfo = myType.GetField("mes");
                var valueResult = myPropInfo.GetValue("");
ошибка
Ссылка на объект не указывает на экземпляр объекта.
какая ссылка хз, класс статический.... плиз подскажите, срочно, завтра сдавать(

Добавлено через 16 минут
пс глянул дебаг, myType = null т.е. она не получается(( а если откоментить typeof(Messange) то работает... надо разобратся почему из строки не находит ее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2015, 21:10
Ответы с готовыми решениями:

Как получить значения статического поля класса с помощью рефлексии?
Есть библиотека классов в ней некоторый класс А. у этого класса есть...

Как задать значения статического поля класса используя рефлексию?
Народ как задать значение статическому полю класса при помощи рефлексии. ...

Ошибка при вызове статического конструктора статического класса
Здравствуйте! Проблема в следующем: Есть класс public static class 1 {...

Рефлексия. Поиск использований поля
Довольно специфичная задача, не знаю есть ли решение. По гуглу ничего не нашел...

Доступ к полям родительского класса (Рефлексия)
Здравствуйте. Есть вот такая конструкция, напишу упрощённо: public partial...

5
Someone007
2378 / 1867 / 855
Регистрация: 09.05.2015
Сообщений: 4,614
Завершенные тесты: 1
09.06.2015, 21:12 2
Потому что нужно указывать полное имя типа в виде Namespace.Class.
C#
1
string fullTypeName = typeof(Messange).FullName;
0
insite2012
Модератор
Эксперт .NET
4862 / 3815 / 1096
Регистрация: 12.10.2013
Сообщений: 11,096
Записей в блоге: 2
09.06.2015, 21:20 3
jenokizm, а о какой рефлексии тут речь? Рефлексия, по моему разумению, подразумевает работу с членами, о которых (кроме строковых имен и того, что они есть) ничего не известно при компиляции.
Вот так это работает. Всего несколько строк. Консольный проект, с ним рядом простая dll, о которой код ничего не знает.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.IO;
using System.Reflection;
 
namespace ReflectionTest {
    class Program {
        static void Main(string[] args) {
            Assembly asm = Assembly.Load(File.ReadAllBytes("ReflectionLib.dll"));
            Type t = asm.GetType("ReflectionLib.Test");
            FieldInfo f = t.GetField("Message", BindingFlags.Static|BindingFlags.Public);            
            string res = (string)f.GetValue(t);
            Console.WriteLine(res);
        }
    }
}
И код самой dll
C#
1
2
3
4
5
6
7
8
9
10
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ReflectionLib {
    public static class Test {
        public static readonly string Message = "Hello World!";
    }
}
0
jenokizm
21 / 37 / 14
Регистрация: 27.03.2014
Сообщений: 754
09.06.2015, 21:21  [ТС] 4
Решено!
надо было так:
C#
1
Type myType = Type.GetType("ConsoleApplication99.Program+Messange");
как узнать такой тупой путь с плюсом? вот так: http://msdn.microsoft.com/en-us/libr...ifiedname.aspx
сам бы не допер) вместо плюча точку ставил)) не пахало))
0
Ev_Hyper
Заблокирован
09.06.2015, 21:30 5
Цитата Сообщение от insite2012 Посмотреть сообщение
jenokizm, а о какой рефлексии тут речь?
System.Reflection используется

Цитата Сообщение от Someone007 Посмотреть сообщение
Потому что нужно указывать полное имя типа в виде Namespace.Class.
зачем? с typeof будет работать и так

Цитата Сообщение от jenokizm Посмотреть сообщение
надо было так:
интересно, почему typeof не подошел
0
jenokizm
21 / 37 / 14
Регистрация: 27.03.2014
Сообщений: 754
12.06.2015, 12:09  [ТС] 6
Ev_Hyper, потому что спать меньше надо на работе.
во первых тему явно не в тот раздел перенес, хотя мне пофиг
во вторых
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
интересно, почему typeof не подошел
Цитата Сообщение от jenokizm Посмотреть сообщение
необходимо только по имени класса из строки!
0
12.06.2015, 12:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2015, 12:09

Рефлексия. Достать методы из класса, которые помечены атрибутом
Допустим имеем такой код : class Test { static public void...

Рефлексия. Получить тип элемента массива
Добрый день. Необходимо получить тип элемента массива, для сравнения с...

Как получить тип свойства (рефлексия)
Например у меня есть несколько классов class A { public B...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru