`

Virtual 与 abstract 区别

 
阅读更多

1.abstract方法只能在抽象类中声明,虚方法则不是。

abstract方法必须在派生类中重写,而virtual则不必
2.abstract方法不能声明方法实体,
abstract public void SD();
虚方法则可以
public virtual void sdf()
{
Console.WriteLine("A");
}
3.虚方法可以实现多态,而抽象方法不可以。。。


c#中的interface abstract 与 virtual

interface用来声明接口
1.只提供一些方法规约,不提供方法主体. 如:
public interface IPerson
{
void getName();//不包含方法主体
}
2.方法不能用public abstract等修饰,无字段变量,无构造函数。
3.方法可包含参数。 如
public interface IPerson
{
void getAge(string s);
}

一个例子(例1):
public interface IPerson
{
IPerson(); //错误
string name; //错误
public void getIDcard();//错误

void getName(); //right
void getAge(string s); //right
}

实现interface的类
1.与继承类的格式一致,如 public class Chinese:IPerson{}
2.必须实现 interface 中的各个方法

例2,继承例1
public class Chinese:IPerson
{
public Chinese(){} //添加构造
public void getName(){} //实现getName()
public void getAge(string s){} //实现getAge()
}

abstract声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似


public abstract class Book
{
public Book()
{
}

public abstract void getPrice(); //抽象方法,不含主体
public virtual void getName() //虚方法,可覆盖
{
Console.WriteLine("this is a test:virtual getName()");
}
public virtual void getContent() //虚方法,可覆盖
{
Console.WriteLine("this is a test:virtual getContent()");
}
public void getDate() //一般方法,若在派生类中重写,须使用new关键字
{
Console.WriteLine("this is a test: void getDate()");
}
}

public class JavaBook:Book
{
public override void getPrice() //实现抽象方法,必须实现
{
Console.WriteLine("this is a test:JavaBook override abstract getPrice()");
}
public override void getName() //覆盖原方法,不是必须的
{
Console.WriteLine("this is a test:JavaBook override virtual getName()");
}
}

测试如下:
public class test
{
public test()
{
JavaBook jbook=new JavaBook();
jbook.getPrice(); //将调用JavaBook中getPrice()
jbook.getName(); //将调用JavaBook中getName()
jbook.getContent(); //将调用Book中getContent()
jbook.getDate(); //将调用Book中getDate()

}
public static void Main()
{

test t=new test();
}
}

virtual标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法

abstract 与virtual : 方法重写时都使用 override 关键字

分享到:
评论

相关推荐

    override abstract virtual interface比较

    override abstract virtual interface比较

    new、abstract、virtual、override,sealed关键字区别和使用代码示例

    new、abstract、virtual、override,sealed关键字区别和使用代码示例

    asp.net中virtual和abstract的区别分析

    本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考。具体分析如下: 一、Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况: 情况1:在基类中定义了...

    c#中的interface abstract与virtual介绍

    abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现

    深入理解C# abstract和virtual关键字

    代码如下: class A { public virtual void Func() // 注意virtual,表明这是一个虚拟函数 { Console.WriteLine(“Func In A”); } } class B : A // 注意B是从A类继承,所以A是父类,B是子类 { public override void ...

    浅谈virtual、abstract方法和静态方法、静态变量理解

    下面小编就为大家带来一篇浅谈virtual、abstract方法和静态方法、静态变量理解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Delphi 关键字详解

    //Abstract关键字必须与Virtual或Dynamic关键字同时使用, 因为抽象方法必须被覆盖式实现. //抽象类不能实例化, 抽象方法不能包含方法体. type TDemo = class private protected procedure X; virtual; abstract;...

    VM_SPEC.CHM

    References to the Java virtual machine throughout this specification refer to this abstract machine rather than to Sun's or any other specific implementation. This book serves as documentation for a ...

    解析abstract与override究竟可不可以同时使用

    abstract class Thingy{ public virtual string Name { get { return “”; } }} 当然Thingy将会被很多子类集成,并且大部分子类都有一个默认的””的Name,或者是null, 或者是其他什么的。关键点并不在这个Name

    VIRTUAL ROBOT ARM CONTROL MODEL By D N D KOTTEGE

    ABSTRACT The Six-axis Virtual Robot arm (SVR) is a computer program which can be used to simulate the functions of a real robotic manipulator in terms of design parameters, movement and control. It ...

    亮剑.NET:.NET深入体验与实战精要清晰版及源码

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    亮剑.NET深入体验与实战精要.part3

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    亮剑.NET深入体验与实战精要.part1.

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    亮剑.NET深入体验与实战精要.part4(完)

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    亮剑.NET深入体验与实战精要.part2

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    Virtual MISO Based Energy-efficient Broadcasting in Clustered Wireless Sensor Networks

    Abstract—Energy efficiency is of great importance in wireless sensor networks, where each node is typically powered by battery with limited energy supply. In this case, cooperative broadcasting plays...

    C#25个问题 静态成员和非静态成员的区别等等

    1.静态成员和非静态成员的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起...14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?

Global site tag (gtag.js) - Google Analytics