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

原创 2004年09月16日 14:02:00

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

下面先看一段代码:

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方法体现了版本控制:

版本控制有两个方面:

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

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

C# virtual、override和new的使用

virtual、override和new的相关使用方法网上有很多介绍,以下这篇文章的作者通过扩展网上流行的示例做了一些扩展,浅显易懂的说明了virtual、override和new的使用方法。 ...
  • ajianchina
  • ajianchina
  • 2015年06月15日 11:00
  • 1458

浅谈C#中new、override、virtual关键字的区别

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的学习了下在设计模式中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来。     一、New ...
  • u010853701
  • u010853701
  • 2014年04月30日 15:19
  • 2320

C#中virtual,new和override的区别

A类 有方法 public virtual void test() B类继承自A类,有方法 public new void test() 或者B类继承自A类,有方法 public overri...
  • zhuzhu837_1
  • zhuzhu837_1
  • 2012年07月17日 09:31
  • 811

C# new virtual和override 区别

Virtual : virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 默认情况下,方法是非虚拟的。不能重写非虚方法。 virtual 修饰符不能与 s...
  • sky1466181491
  • sky1466181491
  • 2016年07月22日 09:56
  • 471

C#语法参考,new ,base,this,overide,virtual关键字,日常学习笔记。

new 约束(C# 参考) Visual Studio 2013 其他版本 new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 如果要使用 new...
  • wlanye
  • wlanye
  • 2015年02月06日 10:43
  • 757

虚方法与new隐藏

虚方法:通过用virtual修饰的父类方法可以在子类中用override修饰子类中的同名方法,使包含子类的父类对象可以使用子类中重写后的该方法。 new:在子类中与在父类中有相同名称,签名的方法时,...
  • fulei1107655988
  • fulei1107655988
  • 2014年08月06日 22:54
  • 623

C#中隐藏(new)和方法重载(overide)的区别

  重写和隐藏的定义: 重写...
  • networdboy
  • networdboy
  • 2007年12月05日 23:42
  • 616

C# 继承与多态,相关关键字virtual、override、new

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T...
  • for_cxc
  • for_cxc
  • 2016年03月30日 10:55
  • 501

简单易懂的解释c#的abstract和virtual的用法和区别

先来看abstract方法,顾名思义,abstract方法就是抽象方法。 1、抽象方法就是没有实现的,必须是形如: public abstract void Init(); 2、拥有抽象方法的类...
  • wzj0808
  • wzj0808
  • 2016年05月12日 22:04
  • 3715

《算法》读书笔记(一)

第1章 基础 本书研究的是算法和数据结构,本章介绍的是学习算法和数据结构所需要的基本工具。它讲解了在随后的章节中用来实现、分析和比较算法的基本原则和方法,包括Java编程模型、数据抽象、基本数...
  • mpx_xb
  • mpx_xb
  • 2016年10月31日 18:06
  • 493
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记(关于C#中的virtual 和 new)
举报原因:
原因补充:

(最多只允许输入30个字)