Вы можете просто вызвать элемент stati c с синтаксисом ClassName.memberName
:
string localStr = First.theStringToGet;
Если элемент не является stati c, необходимо создать объект из этого класса, а затем используйте синтаксис objectName.memberName
:
// Assuming the that `theStringToGet` was not static.
First obj = new First();
string localStr = obj.theStringToGet;
. Для этих целей Reflection вам не нужен.
Если имя класса изменяется, это не работает с stati c члены. Если вам нужно поведение stati c, вы можете использовать шаблон синглтона и либо выводить классы из одного базового класса, либо позволить им реализовывать один и тот же интерфейс. Я покажу вариант интерфейса.
public interface IStringProvider
{
string TheString { get; }
}
public class First : IStringProvider
{
public static readonly First Instance = new First();
private First() {} // Make constructor private, so no one else can instantiate.
public string TheString => "some text";
}
public class Second : IStringProvider
{
public static readonly First Instance = new Second();
private Second() {}
public string TheString => "another text";
}
Теперь вы можете получить доступ к такой строке
void AccessTheString(IStringProvider provider)
{
string localStr = provider.TheString;
}
Пример:
AccessTheString(First.Instance);
AccessTheString(Second.Instance);