C#中抽象方法与虚拟方法的区别

学过C#的人应该都知道抽象方法与虚拟方法,而很多初学者对二者之间的区别并不是很了解。今天本文就来分析一下二者之间的区别。并附上实例加以说明。具体分析如下:


一、主要区别:

对于抽象方法,子类必须实现它

对于虚拟方法,子类可以重写也可以不重写

因此,

两者约束不同


二、实例代码如下:

/* 声明一个抽象类
* 1.抽象类中可以包含变量
* 2.抽象方法中无法声明方法体
*/
abstract class AbsClass
{
  string name;
  public abstract void DisplayValue(string value);
}
/*继承抽象类的子类必须实现抽象方法*/
class AbsClassInherited : AbsClass
{
  /*使用override重写实现*/
  public override void DisplayValue(string value)
  {
    Console.WriteLine(value.ToUpper());
  }
}
 /* 声明虚拟函数
 */
class VirtClass
{
  /*声明一个虚拟函数
   虚拟函数必须实现方法体*/
  public virtual void DisplayValue(string value)
  {
    Console.WriteLine(value);
  }
}
/*虚拟方法可以实现也可以不实现*/
class VirtClassInherited : VirtClass
{
  /*使用override重写实现*/
  public override void DisplayValue(string value)
  {
    Console.WriteLine(value.ToUpper());
  }
}
/* 声明一个接口
 * 1.接口中的方法必须是公用的
 * 2.接口中不允许有变量
 * 3.接口中的方法不允许有方法体
 */
interface IAbs
{
  void DisplayValue(string value);
}

希望本文所做的分析对大家的C#程序设计能有所帮助。

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  C#中抽象方法与虚拟方法的区别

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23625.html

相关内容

C#使用MCI创建的视频或声音播放器 源代码下载

C#实现关闭子窗口而不释放子窗口对象的方法

C#操作LINQ to SQL组件进行数据库建模的基本教程

C#自定义控件添加右键菜单的方法


基于C#实现XML文件读取工具类

C#中Dictionary类使用实例

C#通过链表实现队列的方法

WinForm相对路径的陷阱

时间: 2024-07-31 18:06:18

C#中抽象方法与虚拟方法的区别的相关文章

C#中抽象方法与虚方法的区别

一.抽象方法:只在抽象类中定义,方法修饰符不能使用private,virtual,static. 抽象方法如下示: public abstract class People   //声明一个抽象类 { public abstract void study();  //抽象方法只能定义在抽象类中. } public class Student:People   //继承抽象类 { public  override void study()     //重写抽象类的抽象方法 { Console.Wr

OO 抽象方法与虚方法的区别

 抽象方法与虚方法的区别 抽象方法与虚方法的区别: 一.抽象方法: 1.只能在抽象类中定义: 2.不能有方法的实现:(方法体)[因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现.] 3.被子类继承后,必须重写: 4.使用关键字abstract修饰: 二.虚方法: 1.可以在抽象类和普通类中定义: 2.可以有方法的实现(方法体,即使空的也要声明) 3.被子类继承后,可以重写也也可以不重写: 4.使用关键字virtrual修饰:

Java线程中run和start方法的区别

http://bbs.csdn.net/topics/350206340 Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用:start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程: package com.ljq.test; public class ThreadTest { /** * 观察直接调用run()和用start()启动一个线程的差别 * * @

jquery中html 与 text方法的区别

jquery中html 与 text方法的区别 24 May 2012/in 网站设计和开发 /by Bruce 接鉵jquery的时间并不长,以前都是用直接用js写的,现在发现在jquery这个框架用起来很方便,不但代码量少了,使用也比较简单,对于浏览器的兼容问题也不用担心,在使用的过程中也会遇到一些疑问,在html标签中附加子标签时所用的方法html()与text()的区别. 通常在用jquery写ajax时,都会用到html()这个方法,而不用text()这个方法,他们之间有什么区别呢?

浅谈接口、抽象类、抽象方法和虚方法的区别

C#抽象类和接口孩子间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意.其实,两者之间还是有很大区别的. 首先说一下接口与抽象类的异同: 相同点: 1.他们都不能实例化自己,也就是说都是用来被继承的. 2.抽象类中的抽象方法和接口方法一样,都不能有方法体 不同点: 1.抽象类里可以有字段,接口中不能有字段. 2.抽象类中的普通方法可以有方法体,而接口方法没有方法体. 3.接口中的方法不能有访问修饰符,抽象类中的抽象方

C# 抽象方法和虚方法的区别

一.抽象方法:只在抽象类中定义,方法修饰符不能使用private,virtual,static. (1)象方法只能声明在抽象类中,使用关键字abstract (2)抽象类中的抽象方法必须被子类重写. [抽象方法没有方法体,子类必须重写方法体!!,因此抽象方法可以看成是一个没有方法体的虚方法] 二.虚方法:使用virtual修饰的方法: 虚方法可以有方法体. 注意事项:virtual修饰符不能与private.static.abstract.override修饰符同时使用. ps:override

抽象方法和虚方法的区别

1.抽象类关键字 abstract 2.抽象类不能实例化 3.抽象方法没有方法体 4.子类实现抽象方法的快捷键 Ctrl+.+Enter 5.一个类如果继承抽象类,那么重写重写类中的所有方法 7.抽象类不能是静态类和密封类 8.抽象类方法只能存在于抽象类中 9.抽象类中抽象方法只是用来规定子类方法的形式(参数,返回值)约束子类方法的形式

Java -- Thread中start和run方法的区别

一.认识Thread的 start() 和 run() 1.start(): 我们先来看看API中对于该方法的介绍: 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 结果是两个线程并发地运行:当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法). 多次启动一个线程是非法的.特别是当线程已经结束执行后,不能再重新启动. 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的

org.apache.commons.lang3.StringUtils类中isBlank和isEmpty方法的区别

相信很多java程序员在写代码的时候遇到判断某字符串是否为空的时候会用到StringUtils类中isBlank和isEmpty方法,这两个方法到底有什么区别呢?我们用一段代码来阐述这个区别吧: 1 @Test 2 public void blankEmpty() { 3 String str = " "; 4 System.out.println("Is empty ? " + StringUtils.isEmpty(str)); 5 System.out.pri