using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication2
{
public class One
{
public void OneFunction()
{
Console.WriteLine(1);
}
}
public class Tow:One
{
public static void Main()
{
Tow t = new Tow();
t.OneFunction();
One o = new Tow();
o.OneFunction();
}
public new void OneFunction()//这里的new有什么用?不用new程序也能照样运行~~无非是IDE会提示你在方法 //前面加上new
{
Console.WriteLine(2);
}
}}
这个是子类 重写父类的非虚拟方法。就是说完全另一种实现各式。
最好显示的用new.
new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;你查一下两者的区别就明白了.
不写的话默认就是new
本来你父类已经有同名的方法了,你子类就应该用new覆盖的
new隐藏基类的方法。
但是类Tow中的方法用了new,如下
public new void OneFunction()
{
Console.WriteLine(2);
}执行
One o = new Tow();
o.OneFunction();
的结果却是执行的基类的OneFunction(),并没起到“隐藏基类的方法”的作用啊!
什么叫隐藏?没有隐藏的话你还能出来基类的OneFunction()方法?
隐藏的意思是基类的方法和你子类的方法同时存在即new修饰的方法和基类的方法共存
override修饰的方法重写了基类的方法,不共存