读书笔记(关于C#中的virtual 和 new)

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

自己的读书心得,如果你感觉小儿科,请谅解一只鸟

下面先看一段代码:

using System;

namespace test_ConsoleApplication

{

public class MyClass1

{

public void a()

{

Console.WriteLine("this is class1'a");

}

public virtual void aa()

{

Console.WriteLine("this is class1'aa");

}

}

public class MyClass2:MyClass1

{

public new void a()

{

Console.WriteLine("this is class2'a");

}

public override void aa()

{

Console.WriteLine("this is class2'aa");

}

}

public class MyClass3

{

static void Main()

{

MyClass1 c1;

MyClass2 c2;

c1=new MyClass1();

c1.a();

c1.aa();

Console.WriteLine(c1.GetType().ToString());

c1=new MyClass2();

c1.a();

c1.aa();

Console.WriteLine(c1.GetType().ToString());

c2=new MyClass2();

c2.a();

c2.aa();

Console.WriteLine(c2.GetType().ToString());

Console.ReadLine();

}

}

}

输入结果为:

virtual方法主要用于重写了基类里的方法,new方法体现了版本控制:

版本控制有两个方面:

例如:基类里面定义了两个方法a()和b(),在派生类里面重写了a(),我们用基类引用派生类,工作正常,hoho发布程序。一个月后我们要重新扩充派生类,感觉要扩充b()的同名方法,这样程序给出编译提示。这个时候出现了版本恩体,原先用基类引用派生类调用b()方法,实际调用是基类中的方法b (),扩充后依然调用的是基类b(),new 给出了一种标识。

例如:在基类中定义了一个方法a(),在派生类里面重写了a()且扩充了b()方法,工作正常,hoho发布程序。一个月我们重写基类需要扩充一个b()方法,这样程序给出编译提示。这个时候也出来了版本的问题。

对于属性上面的问题一样存在,重写方法用virtual,以防止出现错误调用!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航