网站首页 > 技术文章 正文
关注我,为您分享C#技术实现
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
多态性通过派生类(子类)覆写基类中的虚函数型方法来实现
C#支持两种多态性:
- 编译时---重载(overload)
- 运行时---虚方法和重写(override)
虚成员和重写
- 指在基类中申明了方法、属性、索引器或事件,也做了一个最简单的处理。
- 使用virtual关键字将成员申明为虚成员
代码示例:
/// <summary>
/// 面积(基类)
/// </summary>
public class Dimensions
{
public const double PI = Math.PI;//圆周率,常量
protected double x, y;//分别代表长、宽
public Dimensions()
{
//空的构造函数
}
public Dimensions(double x, double y)
{
this.x = x;
this.y = y;
}
public virtual double Area()
{
//计算面积,虚方法,等待被重写
return x * y;
}
}
public class Circle : Dimensions
{
//圆
public Circle(double r)//这个构造函数的目的就是去实例化基类,可以做一些事情的
: base(r, 0)
{
}
/// <summary>
/// 重写基类的计算面积的方法
/// </summary>
/// <returns></returns>
public override double Area()
{
return PI * x * x;
}
}
/// <summary>
/// 球体
/// </summary>
public class Sphere:Dimensions
{
public Sphere(double r)
:base(r,0)
{
}
public override double Area()
{
return 4 * PI * x * x;
}
}
/// <summary>
/// 圆柱体
/// </summary>
public class Cylinder: Dimensions
{
public Cylinder(double r,double h)
:base(r,h)
{
}
public override double Area()
{
return 2 * PI * x * x + 2 * PI * x * y;
}
}
运行结果:
虚方法规则:
- 默认情况下,方法是非虚拟的。不能重写非虚方法。
- Virtual修饰符不能与static、abstract、private或override修饰符一起使用。
- 除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。
- 在静态属性上使用virtual修饰符是错误的。
- 通过包括使用override修饰符的属性声明,可在派生类中重写虚拟继承属性。
隐藏基类方法:
- 若要隐藏继承的成员,则使用new修饰符修饰该成员
/// 面积(基类)
/// </summary>
public class Dimensions
{
public const double PI = Math.PI;//圆周率,常量
protected double x, y;//分别代表长、宽
public void Info()
{
//方法体
}
}
public class Circle : Dimensions
{
public new void Info()
{
////方法体
}
}
- 上一篇: C#入门篇章—Class类专题
- 下一篇: 从零开始自学C#基础的最后一天——集合
猜你喜欢
- 2025-01-16 C#13和 .NET9高级功能解析:.NET高手必备技能
- 2025-01-16 C#使用Autofac实现控制反转IoC和面向切面编程AOP
- 2025-01-16 C#设计模式(3)——工厂方法模式
- 2025-01-16 C# - 面向对象知识总结 082
- 2025-01-16 c#简单工厂、抽象工厂、反射
- 2025-01-16 C# 13 和 .NET 9 全知道 :9 处理文件、流和序列化 (1)
- 2025-01-16 Effective C++ 条款07 为多态基类声明virtual析构函数
- 2025-01-16 C# 数据结构和算法 :03 数组和排序(五)
- 2025-01-16 从零开始自学C#基础的最后一天——集合
- 2025-01-16 C#入门篇章—Class类专题
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)