【发布时间】:2015-04-07 23:02:19
【问题描述】:
是否可以在运行时不显式强制转换的情况下获得较低的继承类?
假设我们有三个类A、B 和C。
class A {
int _a;
}
class B : A {
int _b;
}
class C : A {
int _c;
}
而且我在代码的某处有一个通用方法。
void Foo<T> (T t) where T : A;
在这种情况下,我有一个对象A 的引用列表,但我必须调用Foo 并将实例的较低对象类型传递给Foo。在其他方法中,此列表由B 的某些实例和C 的其他实例的A 引用提供。
我希望能够在没有显式转换的情况下使用较低级别的实例调用Foo。在我的真实情况下,我有大量的Bs 和Cs 继承自A,并且我有一些方法可以完成这项工作(我的意思是,这种“隐式”沮丧)。我必须在下面做这样的事情。
在某个地方:
A tmp = new C();
在其他地方:
Foo<typeof(tmp).SomeMagicMethod()>(tmp);
Type.SomeMagicMethod 应该是我可以用来隐式获取较低级别“tmp”的任何内容。
【问题讨论】:
-
你的问题对我来说没有多大意义,请重新表述...
-
Foo<typeof(tmp).SomeMagicMethod()>(tmp);无效;泛型是一个编译时特性。T必须是编译时常量。 -
你好@CommuSoft。我不知道如何更具体。让我试着总结一下我真正的问题。我有一个实现消费者/生产者线程模式的应用程序。在生产者线程中,我的示例中的列表被提供了我的继承树的一个高级对象,以便能够存储所有类型的继承。在我的消费者线程中,我想获取这些继承的基类引用,并隐式获取列表中引用的继承树中的派生类类型,以便能够正确调用应该接收最低派生的泛型方法类
-
不是在编译时,你可以使用反射等。但这一切都很低效,而且是自找麻烦......
-
我看到了@Blorgbeard。所以......您能否阅读我上面的评论并尝试阐明这个问题?非常感谢。
标签: c# .net casting implicit downcast