如何获取某些元数据的私有字段的值?
How do I obtain the value of a private field of some metadata?
我正在使用名为 DevExpress.Xpo 的 NuGet 包,它的 DataStorePool class 有一个私有 int 调用了 connections。我需要以某种方式在另一个 class 中使用它的值,但是 DataStorePool class 被锁定为“元数据”,所以我无法将 int 设置为 public 也没有创建一个 returns 的方法。我该怎么做才能获得 int 的值?
您可以创建一个扩展方法来执行此操作。
它可以看起来像这样:
Foo foo = new Foo();
string c = foo.GetFieldValue<string>("_bar");
以及创建方式:
public static class ReflectionExtensions {
public static T GetFieldValue<T>(this object obj, string name) {
// Set the flags so that private and public fields from instances will be found
var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
var field = obj.GetType().GetField(name, bindingFlags);
return (T)field?.GetValue(obj);
}
}
或
您可以使用 BindingFlags.NonPublic 和 BindingFlags.Instance 标志
FieldInfo[] fields = myType.GetFields(
BindingFlags.NonPublic |
BindingFlags.Instance);
或
You could read how to get it with using reflection here
我正在使用名为 DevExpress.Xpo 的 NuGet 包,它的 DataStorePool class 有一个私有 int 调用了 connections。我需要以某种方式在另一个 class 中使用它的值,但是 DataStorePool class 被锁定为“元数据”,所以我无法将 int 设置为 public 也没有创建一个 returns 的方法。我该怎么做才能获得 int 的值?
您可以创建一个扩展方法来执行此操作。 它可以看起来像这样:
Foo foo = new Foo();
string c = foo.GetFieldValue<string>("_bar");
以及创建方式:
public static class ReflectionExtensions {
public static T GetFieldValue<T>(this object obj, string name) {
// Set the flags so that private and public fields from instances will be found
var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
var field = obj.GetType().GetField(name, bindingFlags);
return (T)field?.GetValue(obj);
}
}
或
您可以使用 BindingFlags.NonPublic 和 BindingFlags.Instance 标志
FieldInfo[] fields = myType.GetFields(
BindingFlags.NonPublic |
BindingFlags.Instance);
或
You could read how to get it with using reflection here