【问题标题】:Question regarding generics and inheritance关于泛型和继承的问题
【发布时间】:2011-08-01 04:23:02
【问题描述】:

我有一个派生自Base<T> 的类Derived<T>。以下哪些说法是对的或错的?

typeof(Derived<SomeType>).IsSubclassOf(typeof(Base<SomeType>))
typeof(Derived<>)        .IsSubclassOf(typeof(Base<SomeType>))
typeof(Derived<SomeType>).IsSubclassOf(typeof(Base<>))
typeof(Derived<>)        .IsSubclassOf(typeof(Base<>))

提前致谢

【问题讨论】:

  • 像这样的声音应该标记为作业
  • @Chris:不,这不是家庭作业。我什至不是学生。我怀念 C++ 的简单性,其中模板只不过是复杂的(而且有些令人费解的)宏。 (但是,你不能测试任何关于模板的东西,因为它们在运行时不存在。):S
  • @Linkgoron:我正在为许多开放项目而苦苦挣扎,我最不想做的就是打开另一个缓慢的 Visual Studio 实例。
  • 在您的一个解决方案中创建一个新的控制台应用程序。将其设置为启动项目。不需要新的 Visual Studio 实例。
  • 或者获取TestDriven.net,编写方法,右键测试。或 .NET 垫。

标签: c# generics reflection inheritance


【解决方案1】:

在这种情况下,第一个:

typeof(Derived<SomeType>).IsSubclassOf(typeof(Base<SomeType>))

其他的不编译 - 如果没有它的类型参数,你不能引用泛型,例如

Something<>

【讨论】:

  • @Chris Slain:错了! typeof(Derived&lt;&gt;) 是有效代码。事实上,我正在编写一个HUGE 元编程框架,它依赖 能够在运行时引用泛型。更多信息:msdn.microsoft.com/en-us/library/58918ffs.aspx
  • 我已更正-您可以编译它。但答案仍然是 #1。
  • @Chris Shain:抱歉,我打错了(实际上是看错了)你的名字。
  • @Chris:是的,答案是正确的。嗯,无法撤消反对票。
  • @Eduardo Leon: 再次点击取消投票(downvoting*2)。我不是在开玩笑!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 2011-08-20
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多