今天看到一个朋友
在override,new上的问题搞错,呵呵我想很多刚入门的朋友也一样吧
我呢就查查资料顺便巩固一下自己的理解,现在整理出学习笔记.
先看段代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 namespace ConsoleApplication1 6 { 7 class Program 8 { 910 static void Main(string[] args)11 { 12 baseClass bc;13 class1 ct1 = new class1();1415 class2 ct2 = new class2();1617 ct1.prinf();18 bc = ct1;19 bc.prinf();2021 Console.WriteLine("---------------------");22 23 ct2.prinf();24 bc = ct2;25 bc.prinf();2627 }28 }2930 public class baseClass31 { 32 private int index = 0;3334 public virtual void prinf()35 { 3637 Console.WriteLine("这是基类虚方法" + index.ToString());3839 }4041 }4243 public class class1 : baseClass44 { 45 private int index = 1;4647 public override void prinf()48 { 4950 Console.WriteLine("这是子类新的方法" + index.ToString());5152 }5354 }5556 public class class2 : baseClass57 { 58 private int index = 2;5960 public new void prinf()61 { 6263 Console.WriteLine("这是子类新的方法" + index.ToString());6465 }6667 }686970} 71 运行结果:
这是子类新的方法1
这是子类新的方法1
---------------------
这是子类新的方法2这是基类虚方法0
如上
使用
override重写printf方法,通过父类引用一样只能看到重写后的方法;
如果使用new隐藏printf方法,父类子类引用各自对应方法;
override重写虚方法,那么就只剩下重写以后的方法;
new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;
真想弄些实际应用的例子,想好了补上.
本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2010/12/03/1895408.html,如需转载请自行联系原作者