The program is probably just demonstrating that you can hide a virtual method - hence the use of the 'new' keyword.
It is difficult to see why you'd want to when you can override it instead.
If you did use get() rather than ToString(), then the latter would still be available (as a result of inheritance) but would return the runtime type of the variable to which it was applied. So pc.ToString() would return the string "PreferredCustomer" because 'pc' refers to an object of that type.