Polymorphism thing about a member variable [duplicate]


I always think I know the Polymorphism until I meet below example.


I have two classes, Father and Son. Code as follows:


Father:



public class Father
{
public String name = "father";
public virtual void dosth()
{
Console.WriteLine(name);
}
}


Son:



public class Son : Father
{
public String name = "son";
public override void dosth()
{
Console.WriteLine(name);
}
}


And I Call them:



static void Main(string[] args)
{
Father p = new Son();
Console.WriteLine(p.GetType()); //print son
p.dosth(); //print son
Console.WriteLine(p.name); //print father
}


As I think, variable p points to a son object, so first, Console will print "Son" Type. And I'm right.


Then p.dosth() will call the son's dosth(), So it will print "son". And I'm right again.


Last ,p.name should be "son",too. But this time, I'm wrong. It prints "father".


I can't understand that p variable's type is son, why it still use the father's member?