gpt4 book ai didi

c# - 使用反射获取派生类静态实例的实例

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:36 25 4
gpt4 key购买 nike

如果此问题已在其他地方得到解答,我深表歉意,但我对 Reflection 并不过分熟悉,因此我不确定我应该搜索的确切术语。

基本上,我试图根据类型为类找到已定义的公共(public)静态字段列表。

鉴于 LocalisationToken 类,我有许多基于此的类,例如 AboutToken、AdminToken 等。

这些类中的每一个都有这些派生类的 public static readonly 实例,例如:

public static readonly LocalisationToken TermsAndConditions = new AboutToken("Terms And Conditions", Guid.Parse("595FB313-4940-489b-9CC8-4B9BF0B62E8B"));
public static readonly LocalisationToken OkGotIt = new AboutToken("OK, got it", Guid.Parse("5F5F22A4-C45C-43f0-A2A4-304740E0EE12"));

我想做的是在运行时找到已编译库中的所有实例。例如,实例化 AboutToken 时的底层代码是使用构造函数属性创建一个新的 LocalisationToken。我的要求是取回 Guid 和默认文本,例如“条款和条件”和 595FB313-4940-489b-9CC8-4B9BF0B62E8B

如果我在包含 LocalisationToken 的程序集上使用 GetTypes(),我只会得到 AboutToken、AdminToken 等的各种派生类。我需要的是实际实例。

碰巧,我根本不需要派生类。但是,即使所有实例都标记为“LocalisationTokens”,我是否需要遍历这些实例?

最佳答案

重要的是要了解它是静态的字段 - 而不是实例

不过,您可以轻松找到只读静态字段,并获取它们的值。例如:

var someAssembly = typeof(Foo).Assembly; // Or whatever
var values = from type in someAssembly.GetTypes()
from field in type.GetFields(BindingFlags.Static |
BindingFlags.Public |
BindingFlags.NonPublic)
where field.IsInitOnly &&
field.FieldType == typeof(LocalisationToken)
select (LocalisationToken) field.GetValue(null);

关于c# - 使用反射获取派生类静态实例的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com