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)
    {
    }
}
 
     
     
     
     
    