【发布时间】:2014-01-16 19:31:52
【问题描述】:
我不明白为什么下面的行为会如此。也不知道是隐藏还是其他原因。
class A<T>
{
public class B : A<int>
{
public void b()
{
Console.WriteLine(typeof(T).ToString());
}
public class C : B
{
public void c()
{
Console.WriteLine(typeof(T).ToString());
}
}
public class D : A<T>.B
{
public void d()
{
Console.WriteLine(typeof(T).ToString());
}
}
}
}
class Program
{
static void Main(string[] args)
{
A<string>.B.C c = new A<string>.B.C();
A<string>.B.D d = new A<string>.B.D();
c.c();
c.b();
d.d();
d.b();
}
}
问题是:
为什么
c.c()产生System.String 而c.b()产生System.Int32?为什么
d.d()和d.b()都产生System.String并且与C类的行为方式不同?
【问题讨论】:
-
似乎这段代码被故意混淆了。解决办法是一开始就不要写这样的代码。
-
如果有人有正当理由在任何实际代码(无论是否生成)中使用这种乱七八糟的嵌套类,我都会感到惊讶。
-
实用与否,我目前很困惑 :( 个人认为这类问题非常适合提高人们阅读规范的能力,这本身很有用。
-
乔恩·斯基特难住了??问题:赞成。
标签: c# generics typeof type-parameter