-
C#多态性学习,虚方法、抽象方法、接口等用法举例
在面向对象编程中,多态性是一种重要的概念,可以让我们更灵活地处理不同类型的对象。在C#中,多态性可以通过虚方法、抽象方法和接口来实现。接下来,我们将分别介绍这三种方法的用法,并通过一些实例代码来讲解它们的具体应用。
虚方法是在父类中定义的方法,可以被子类重写。通过在方法前加上`virtual`关键字来定义虚方法。子类可以通过`override`关键字来重写父类中的虚方法。下面我们通过一个简单的例子来说明虚方法的用法:
上面的代码定义了一个Animal类,其中包含一个虚方法Talk。然后定义了Dog和Cat类,它们分别重写了Talk方法。在Main方法中,我们创建了Animal、Dog和Cat的实例,并调用Talk方法。结果会分别输出"Animal is talking."、"Dog is barking."和"Cat is meowing."。
接口是一种规范,可以定义一个类应该实现哪些方法。通过interface关键字来定义接口,类可以通过关键字`implements`来实现接口。下面是一个使用接口的例子:
在上面的代码中,定义了一个IShape接口,其中有一个GetArea方法。Circle和Rectangle类分别实现了IShape接口,并分别实现了GetArea方法。在Main方法中,我们创建了Circle和Rectangle的实例,并调用GetArea方法计算出面积。
抽象方法是一种没有方法体的方法,必须在子类中实现。通过`abstract`关键字来定义。下面是一个使用抽象方法的例子:
上面的代码中,定义了一个Shape类,其中包含一个抽象方法GetArea。Square类继承自Shape类,必须实现GetArea方法。在Main方法中,我们创建了Square的实例,并调用GetArea方法计算出面积。
通过上面的例子,我们了解了C#中虚方法、抽象方法和接口的用法。多态性可以让我们更加灵活地处理对象,提高代码的可维护性和扩展性。希望这些例子对你有所帮助。
文章为本站原创,如若转载,请注明出处:https://www.xin3721.com/ArticlecSharp/c48473.html
虚方法是在父类中定义的方法,可以被子类重写。通过在方法前加上`virtual`关键字来定义虚方法。子类可以通过`override`关键字来重写父类中的虚方法。下面我们通过一个简单的例子来说明虚方法的用法:
class Animal
{
public virtual void Talk()
{
Console.WriteLine("Animal is talking.");
}
}
class Dog : Animal
{
public override void Talk()
{
Console.WriteLine("Dog is barking.");
}
}
class Cat : Animal
{
public override void Talk()
{
Console.WriteLine("Cat is meowing.");
}
}
Animal animal = new Animal();
animal.Talk();
Animal dog = new Dog();
dog.Talk();
Animal cat = new Cat();
cat.Talk();
{
public virtual void Talk()
{
Console.WriteLine("Animal is talking.");
}
}
class Dog : Animal
{
public override void Talk()
{
Console.WriteLine("Dog is barking.");
}
}
class Cat : Animal
{
public override void Talk()
{
Console.WriteLine("Cat is meowing.");
}
}
Animal animal = new Animal();
animal.Talk();
Animal dog = new Dog();
dog.Talk();
Animal cat = new Cat();
cat.Talk();
上面的代码定义了一个Animal类,其中包含一个虚方法Talk。然后定义了Dog和Cat类,它们分别重写了Talk方法。在Main方法中,我们创建了Animal、Dog和Cat的实例,并调用Talk方法。结果会分别输出"Animal is talking."、"Dog is barking."和"Cat is meowing."。
接口是一种规范,可以定义一个类应该实现哪些方法。通过interface关键字来定义接口,类可以通过关键字`implements`来实现接口。下面是一个使用接口的例子:
interface IShape
{
double GetArea();
}
class Circle : IShape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public double GetArea()
{
return Math.PI * radius * radius;
}
}
class Rectangle : IShape
{
private double width;
private double height;
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
public double GetArea()
{
return width * height;
}
}
Circle circle = new Circle(5);
Console.WriteLine("Circle area: " + circle.GetArea());
Rectangle rectangle = new Rectangle(3, 4);
Console.WriteLine("Rectangle area: " + rectangle.GetArea());
{
double GetArea();
}
class Circle : IShape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public double GetArea()
{
return Math.PI * radius * radius;
}
}
class Rectangle : IShape
{
private double width;
private double height;
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
public double GetArea()
{
return width * height;
}
}
Circle circle = new Circle(5);
Console.WriteLine("Circle area: " + circle.GetArea());
Rectangle rectangle = new Rectangle(3, 4);
Console.WriteLine("Rectangle area: " + rectangle.GetArea());
在上面的代码中,定义了一个IShape接口,其中有一个GetArea方法。Circle和Rectangle类分别实现了IShape接口,并分别实现了GetArea方法。在Main方法中,我们创建了Circle和Rectangle的实例,并调用GetArea方法计算出面积。
抽象方法是一种没有方法体的方法,必须在子类中实现。通过`abstract`关键字来定义。下面是一个使用抽象方法的例子:
abstract class Shape
{
public abstract double GetArea();
}
class Square : Shape
{
private double side;
public Square(double side)
{
this.side = side;
}
public override double GetArea()
{
return side * side;
}
}
Square square = new Square(5);
Console.WriteLine("Square area: " + square.GetArea());
{
public abstract double GetArea();
}
class Square : Shape
{
private double side;
public Square(double side)
{
this.side = side;
}
public override double GetArea()
{
return side * side;
}
}
Square square = new Square(5);
Console.WriteLine("Square area: " + square.GetArea());
上面的代码中,定义了一个Shape类,其中包含一个抽象方法GetArea。Square类继承自Shape类,必须实现GetArea方法。在Main方法中,我们创建了Square的实例,并调用GetArea方法计算出面积。
通过上面的例子,我们了解了C#中虚方法、抽象方法和接口的用法。多态性可以让我们更加灵活地处理对象,提高代码的可维护性和扩展性。希望这些例子对你有所帮助。
文章为本站原创,如若转载,请注明出处:https://www.xin3721.com/ArticlecSharp/c48473.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比