欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > C#中虚函数和抽象函数的概念

C#中虚函数和抽象函数的概念

2024/10/24 17:25:52 来源:https://blog.csdn.net/qq_34177692/article/details/142708647  浏览:    关键词:C#中虚函数和抽象函数的概念

1)虚函数 virtual
virtual用于在基类中修饰方法,允许在派生类中使用override关键字重写方法

默认情况下,方法是非虚拟的。 不能替代非虚方法。v

irtual 修饰符不能与 static、abstract、private 或 override 修饰符一起使用。

virtual 方法有方法体,只是要求在派生类中进行override选择性重写操作。

2)抽象方法 abstract

抽象方法是在基类中声明,但没有提供具体的实现,而是在派生类中实现。它们用于强制派生类提供特定的方法实现。

抽象类中有抽象方法,也可以没有抽象方法,抽象方法只存在于抽象类中,不存在于普通类中

抽象类不能被实例化,作为基类,派生类的模版,抽象类中可以包含抽象方法和非抽象方法。

抽象方法abstract和virtual虚方法的区别

1)虚方法必须有实现部分,抽象方法不可以有实现部分

2)虚方法可以在派生类中重写,也可以不重写,抽象方法必须在派生类中重写。

3)虚方法可以在任何非密封类中身影,抽象方法只能在抽象类中进行声明

4)如果类包含抽象方法,则该类必须为抽象类,不能被实例化

虚方法倾向于代码复用,抽象方法约束子类必须实现某方法

虚方法的使用例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace VirtualMethod01
{//虚方法的示例//virtual方法public class BaseClass{public virtual void Display()//基类中的虚方法{Console.WriteLine("BaseClass Display");}}public class DerivedClass : BaseClass//派生类从基类中继承{public override void Display() //override重写基类中的虚方法{Console.WriteLine("DerivedClass Dispaly");}}internal class Program{static void Main(string[] args){BaseClass bsc = new BaseClass();bsc.Display();DerivedClass ddc = new DerivedClass();ddc.Display();//输出override的内容BaseClass bsc2 = new DerivedClass();//通过基类的引用调用派生类的实列时候,根据多态,会执行派生类中的版本bsc2.Display(); //输出override的内容}}
}

抽象方法的使用的例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;//抽象方法的例子
namespace AbstractMethod
{public abstract class Shape //含有抽象方法是抽象类//抽象类不能实例化{public abstract double Area(); //抽象方法没有方法体public abstract string Name { get; set; } //抽象属性没有具体实现}public class Rectangle : Shape{private string name;public override string Name//实现抽象属性{get { return name; }set { name = value; }}private double width;private double height;public double WIDTH{get { return width; }set { width = value; }}public double HEIGHT{get { return height; }set { height = value; }}public override double Area()//子类中重写抽象类中的抽象方法{return width * height;  }}internal class Program{static void Main(string[] args){Rectangle rt = new Rectangle();rt.WIDTH = 100;rt.HEIGHT = 200;Console.WriteLine(rt.Area());}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com