c#中new, override, virtual的具体用法
class program
{
static void main(string[] args)
{
testshape();
console.writeline("testshape end =============" + environment.newline);
testderive();
console.writeline("testderive end =============" + environment.newline);
testderive2();
console.writeline("testderive2 end =============" + environment.newline);
console.readkey();
}private static void testshape()
{
system.collections.generic.listshapes = new system.collections.generic.list ();
shapes.add(new circle());
shapes.add(new rectangle());
shapes.add(new triangle());
shapes.add(new diamond());
foreach (shape s in shapes)
{
s.methodvirtual();
s.method();
console.writeline();
}}
private static void testderive()
{
circle circle = new circle();
rectangle rectangle = new rectangle();
triangle triangel = new triangle();
diamond diamond = new diamond();
circle.methodvirtual();
circle.method();
console.writeline();
rectangle.methodvirtual();
rectangle.method();
console.writeline();
triangel.methodvirtual();
triangel.method();
console.writeline();
diamond.methodvirtual();
diamond.method();
console.writeline();
}private static void testderive2()
{
circle circle = new circle();
printshape(circle);
rectangle rectangle = new rectangle();
printshape(rectangle);
triangle triangel = new triangle();
printshape(triangel);
diamond diamond = new diamond();
printshape(diamond);
///out put:
//circle override methodvirtual
//base method call//base methodvirtual call
//base method call//base methodvirtual call
//base method call//base methodvirtual call
//base method call
}static void printshape(shape sharpe)
{
sharpe.methodvirtual();
sharpe.method();
console.writeline();
}
}public class shape
{
public virtual void methodvirtual()
{
console.writeline("base methodvirtual call");
}public void method()
{
console.writeline("base method call");
}
}///类描述:override了基类的virtual方法
///
///第一种使用方法:转型为父类
///sharp s = new circle()
///s.methodvirtual();
///s.method();
///因为子类已经override了父类的methodvirtual,所以即使子类转型为了sharp,调用的还是子类的方法
///out put:
///circle override methodvirtual
///base method call
///
///第二类使用方法:使用子类本身
///这很好理解,全部输出的是子类的方法
///circle circle = new circle();
///circle.methodvirtual();
///circle.method();
///out put:
///circle override methodvirtual
///base method call
class circle : shape
{
public override void methodvirtual()
{
console.writeline("circle override methodvirtual");
}
}///类描述:未做任何处理
///
///第一种使用方法
///sharp s = new rectangle()
///s.methodvirtual();
///s.method();
///out put:
///base methodvirtual call
///base method call
///
///第二类使用方法:使用子类本身
///这很好理解,全部输出的是子类的方法
///rectangle rectangle = new rectangle();
///rectangle.methodvirtual();
///rectangle.method();
///out put:
///base methodvirtual call
///base method call
class rectangle : shape
{}
///类描述:new了基类的虚方法即非虚方法
///
///第一种使用方法
///sharp s = new triangle()
///s.methodvirtual();
///s.method();
///因为子类已经new了父类的方法,所以s输出的是父类的方法
///out put:
///base methodvirtual call
///base method call
///
///第二类使用方法:使用子类本身
///这很好理解,全部输出的是子类的方法
///triangle triangel = new triangle();
///triangel.methodvirtual();
///triangel.method();
///out put:
///triangle new methodvirtual
///triangle new method
class triangle : shape
{
public new void methodvirtual()
{
console.writeline("triangle new methodvirtual");
}public new void method()
{
console.writeline("triangle new method");
}
}///类描述:创建了基类方法相同的方法,未new及override
///编译器会做提示“隐藏继承”,并有如存在 new 关键字一样执行操作
///
///第一种使用方法
///sharp s = new diamond()
///s.methodvirtual();
///s.method();
///因为默认new的效果,所以输出和显式new修饰的一样
///out put:
///base methodvirtual call
///base method call
///
///第二类使用方法:使用子类本身
///这很好理解,全部输出的是子类的方法
///diamond diamond = new diamond();
///diamond.methodvirtual();
///diamond.method();
///out put:
///diamond default methodvirtual
///diamond default method
class diamond : shape
{
public void methodvirtual()
{
console.writeline("diamond default methodvirtual");
}public void method()
{
console.writeline("diamond default method");
}
}
上面代码的结果,如果基类使用接口代替,也是一样的效果。
主要注意看override或new了基类的方法后,调用方将子类对象转型为父类后的输出会有
暗影猎手失落的世界 最新版本v30.118.6.0
下载格里姆瓦勒完全版 安卓版v1.2.0
下载忍者武士暗影格斗无限金币版 安卓版v1.82.1
下载忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载创造与魔法免登录版 手机版v1.0.0760
创造与魔法是一款高度自由的沙盒冒险手游,该游戏采用了3D最新
创造与魔法gm版 安卓版v1.0.0760
创造与魔法是一款有英雄互娱运营的一款经营沙盒建造手游,该游戏
创造与魔法变态无敌版 v1.0.0760
创造与魔法是一款3DQ版的沙盒模拟建造手游,在这里玩家需要适
腾讯普通话小镇游戏 安卓版v2.2.5
普通话小镇是由腾讯游戏追梦计划推出发行的模拟经营类型普通学习
海岛村 最新版v1.0
海岛村是一款非常好玩的模拟经营类手游,玩家在游戏中将会有一个