У меня есть класс C в блоке подобное это:
internal class C
{
internal static string About_Name {
get { return "text"; }
...
}
У меня есть приблизительно 20 таких статических свойств. Есть ли путь, во внешнем блоке, не используя друга атрибут сборки (только отражение .NET), получите класс C, таким образом, я могу вызвать любое из статических свойств строки как это:
Class C = <some .Net reflection code>;
string expected = C.About_Name;
Если это не будет возможно, то код отражения .NET для получения значения свойства строки непосредственно будет достаточен, но не идеальный.
Попробуйте это ...
Изменить: Я не думал об использовании просто типа вместо экземпляра объекта, когда это было статическое свойство .
Удалено var obj = Activator.CreateInstance (type);
и используется тип
в prop.GetValue вместо obj
.
namespace ClassLibrary1
{
internal class Class1
{
internal static string Test { get { return "test"; } }
}
public class Class2
{
}
}
var ass = Assembly.GetAssembly(typeof(Class2));
var type = ass.GetType("ClassLibrary1.Class1");
var prop = type.GetProperty("Test", BindingFlags.Static
| BindingFlags.NonPublic);
var s = (string)prop.GetValue(type, null);
Да, это можно сделать.
Он использует Type.GetProperty ()
.
Пример:
// Load your assembly and Get the Type
// Assembly load code...
...
// Get type
Type asmType = typeof(C);
// Get internal properties
PropertyInfo pi = asmType.GetProperty("About_Name", BindingFlags.NonPublic | BindingFlags.Static);
// Get Value
var val = pi.GetValue(asmType, null);
Этот код вернет « текст
» в val
, так что оттуда делайте с ним то, что вам нужно.
Чтобы сделать это в том смысле, в котором вы хотите, превратите код в метод следующим образом:
private static string GetString(Type classToCheck, string PropertyName)
{
PropertyInfo pi = classToCheck.GetProperty(PropertyName, BindingFlags.NonPublic | BindingFlags.Static);
object val = null;
if (pi != null)
val = pi.GetValue(classToCheck, null);
return (val != null) ? val.ToString() : string.Empty;
}
Использование будет следующим:
string expected = GetString(typeof(C), "About_Name");