Why is the following code snippet valid in C#? This is a feature of the compiler or a bug?
class A
{
public class B : A
{
}
}
class C : A.B
{
public void Foo(C.B b)
{
}
}
class D : A
{
public void Foo(D.B.B.B.B b)
{
}
}