2012-04-29 10:20:20|?次阅读|上传:wustguangh【已有?条评论】发表评论
虚方法用virtual修饰 ,它们可以在派生类中被重写(override)。 例如,此方法可被任何继承它的类重写。
virtual 修饰符不能与 static、abstract, private或 override 修饰符一起使用
sealed 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。
new 用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说在使用派生类的方法是调用的方法是New关键字新定义出来的方法,而不是基类的方法。在 不使用New关键字来隐藏基类方法也是可以的,编译器会出现一个警告,提示如果有意去隐藏基类的方法,请使用New关键字修饰。
注意事项:
a.New和Override这两个关键字是互斥的。不可以同时使用。
b.Override关键字主要是提供派生类对基类方法的新实现,重写的基类方法必须和Override的方法具有相同的签名,此关键字不可以用于重写非虚方 法和静态方法,与其配套使用的关键字是Virtual、abstract、Override。与此同时,Override方法还不可以修改Virtual 方法的可访问性,Override方法和Virtual方法必须具有相同的访问修饰符,不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。
下面这个例子讲述了new和 virtual/override 的区别:
class Program { static void Main(string[] args) { contact ct1 = new class1(); contact ct2 = new class2(); class2 sp = new class2(); sp.prinf(); ct1.prinf(); ct2.prinf(); } } abstract public class contact { public virtual void prinf() { Console.WriteLine("这是虚方法"); } } public class class1 : contact { public override void prinf() { Console.WriteLine("这是个重写的新方法"); } } public class class2 : contact { public new void prinf() { Console.WriteLine("这是另一个新的方法"); } }
结果:
这是另一个新的方法; 这是个重写的新方法 这是虚方法