1

如何找到签名为的类型的具体类型IEnumerable<Func<ITab>>

我的构造函数采用上述类型以执行延迟加载。本质上,只在需要时加载选项卡以减少启动时间。但是,每个具体Tab实现都由表示选项卡名称的属性修饰。当我遍历我的列表时,我想获取代表的具体类型以获取属性值。

我知道.GetType().GetMethod("Invoke").ReturnType,但这又回来了ITab。我似乎只能通过调用来找到具体类型Invoke()

在访问与每种具体类型相关的信息时,是否有更好的方法来使用委托实现延迟加载?

4

2 回答 2

3

为什么在实际调用返回它的方法之前需要知道 Tab 的类型?当它返回时,您可以使用GetType()然后找到属性。如果您的一个函数可以返回不同的实现ITab怎么办?尤其是如果从数据库或 xml 等外部资源中挑选合适的资源。需要调用该委托。

于 2013-01-29T16:49:27.070 回答
2

通常,您似乎结合/混淆了两个问题:一个是关于您的选项卡的(元)数据,另一个是选项卡加载时间的速度优化。如果您现在需要元数据,但稍后需要选项卡内容,则需要拆分它们。

即不返回IEnumerable<Func<ITab>>,返回类似的内容IEnumerable<ITabInfo>,其中ITabInfo包含 1)您需要立即获得的选项卡信息,以及 2)稍后将调用的委托以加载选项卡的实际内容。

您无法获得“方法将在未来调用中返回的类型”。那将相当于一个水晶球(想象一下return random.Next(2) == 0 ? (ITab)new TabTypeA() : (ITab)new TabTypeB();)。

于 2013-01-29T17:07:42.833 回答