Я не понимаю, почему следующее поведение ведет себя так, как оно есть. Я даже не знаю, вызвано ли это скрытием или чем-то еще.
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
?