static void Main(string[] args) { Overrider overrider = new Overrider(); BaseClass b1 = overrider; overrider.Foo(); //Overrider.Foo //重写会改变我的这个方法或属性 b1.Foo(); //Overrider.Foo //重写会改变我的这个方法或属性 Hider hider = new Hider(); BaseClass b2 = hider; hider.Foo(); //Hider.Foo //new关键字重写会改变我的这个方法或属性 b2.Foo(); //BaseClass.Foo //new关键字但不会改变我原本的这个方法或属性 }
public static void Main(string[] args) { Overrider over = new Overrider(); BaseClass b1 = over; over.Foo(); b1.Foo(); Hider h = new Hider(); BaseClass b2 = h; h.Foo(); b2.Foo(); }
static void tstHiding() { //The differences in behavior between Overrider and Hider are demonstrated in the following code: Overrider over = new Overrider(); BaseClass b1 = over; over.Foo(); // Overrider.Foo b1.Foo(); // Overrider.Foo Hider h = new Hider(); BaseClass b2 = h; h.Foo(); // Hider.Foo b2.Foo(); // BaseClass.Foo }
static void Main(string[] args) { var over = new Overrider(); BaseClass b1 = over; over.Foo(); b1.Foo(); var h = new Hider(); BaseClass b2 = h; h.Foo(); b2.Foo(); Console.ReadKey(); }
public static void Main() { Overrider over = new Overrider(); BaseClass b1 = over; over.Foo(); b1.Foo(); Console.WriteLine(); Hider h = new Hider(); BaseClass b2 = h; h.Foo(); b2.Foo(); }
static void Main(string[] args) { Stock msft = new Stock { Name = "MSFT", SharesOwned = 1000L }; Console.WriteLine(msft.Name); Console.WriteLine(msft.SharesOwned); Console.WriteLine(msft); House mansion = new House { Name = "Mansion", Mortgage = 250000M }; Console.WriteLine(mansion); Console.WriteLine(mansion.Name); Console.WriteLine(mansion.Mortgage); Console.WriteLine(mansion.Liability); // polymorphism Display(msft); Display(mansion); // Upcast : implicitly upcast to a base class reference Asset a = msft; // True : Console.WriteLine(a == msft); // OK : Console.WriteLine(a.Name); // Error: SharesOwned undefined // Console.WriteLine(a.SharesOwned); // Downcast : explicitly downcast to a subclass reference Stock s = (Stock)a; // <No error> Console.WriteLine(s.SharesOwned); // True : Console.WriteLine(s == a); // True : Console.WriteLine(s == msft); // as operator performs a downcast that evaluates to null (rather than throwing // an exception) if the downcast fails Asset asserNull = new Asset(); Stock t = asserNull as Stock; // t is null; no exception thrown Console.WriteLine(t?.SharesOwned); // new versus override Overrider over = new Overrider(); BaseClass b1 = over; over.Foo(); // Overrider.Foo b1.Foo(); // Overrider.Foo Hider h = new Hider(); BaseClass b2 = h; h.Foo(); // Hider.Foo b2.Foo(); // BaseClass.Foo // Boxing : convert a value-type instance to a reference-type instance int x = 9; // box the int into an object object obj = x; // Unboxing : cast the object back to the original value type // Unboxing : requires an explicit cast int y = (int)obj; x = 5; // changing the value of x doesn’t change its previously boxed copy Console.WriteLine(obj); // 9 }