Доступ к члену статического класса с помощью строковой переменной (строка содержит имя статического класса) - PullRequest
0 голосов
/ 01 июля 2018

Меня смущает, есть ли способ получить доступ к значениям свойств статического класса, используя статическое имя класса, определенное внутри строковой переменной Пример:

У меня есть статический класс, как показано ниже

public static class CoreConstants
{
    public const string  HostAddress= "someaddress";
}

И у меня есть строковая переменная типа

private string staticClassName="CoreConstants";

Так есть ли способ получить значение поля HostAddress, используя строку?

Я знаю, что мы можем использовать метод Activator.CreateInstance(), если класс является нормальным классом, и используя экземпляр, мы можем получить значения. Но что если класс является статическим классом?

Моя настоящая ситуация такова, что у меня мало статических классов, которые содержат константы для разных языков. Каждый запрос будет передавать строку индикатора языка, поэтому, используя эту строку, мне нужно получить точное сообщение от определенного статического класса.

1 Ответ

0 голосов
/ 01 июля 2018

Сначала вы должны получить тип, к которому относится свойство:

var type = Type.GetType("CoreConstants");

Имейте в виду, что вам нужно полное имя , включая пространство имен и сборку, в которой определен тип. В противном случае загрузчик типов будет просто смотреть в mscorlib, делая GetType return null.

Если у вас есть тип, просто вызовите Type.GetProperty или Type.GetField в зависимости от того, хотите ли вы получить доступ к полю или свойству:

var field = type?.GetField("HostAddress");

Наконец получим значение статического поля:

var value = field?.GetValue(null);

Поскольку ваше поле равно static, параметр, предоставленный для GetValue, равен null. Если бы это было поле экземпляра, вы должны предоставить экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...