如何找到签名为IEnumerable<Func<ITab>>
的类型的具体类型?
我的构造函数采用上述类型以执行延迟加载。基本上,只在需要时加载选项卡以减少启动时间。但是,每个具体的Tab
实现都由一个表示选项卡名称的属性修饰。当我循环遍历我的列表时,我想获得委托具体类型以获取属性值。
我知道.GetType().GetMethod("Invoke").ReturnType
,但会返回ITab
。我只能通过调用Invoke()
找到具体类型。
在访问与每种具体类型相关的信息时,是否有更好的方法可以使用委托来实现延迟加载?
答案 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();
)。