获取具体的委托代表返回类型

时间:2013-01-29 16:43:16

标签: c# .net-3.5 delegates

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

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

我知道.GetType().GetMethod("Invoke").ReturnType,但会返回ITab。我只能通过调用Invoke()找到具体类型。

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

2 个答案:

答案 0 :(得分:3)

为什么在实际调用返回Tab的方法之前需要知道Tab的类型?返回后,您可以使用GetType()然后找到属性。如果您的某个函数可以返回ITab的不同实现,该怎么办?特别是如果从数据库或xml等外部源中选择正确的那个。需要调用该委托。

答案 1 :(得分:2)

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

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

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