C#百识百例之十九-虚方法

该文通过一个C#编程实例展示了虚方法的概念,包括其定义、使用及在继承中的重载。在基类Geometry中定义了虚方法Area,子类如Circle、Sphere和EquilateralTriangle根据各自形状特性重载了该方法,实现了不同的面积计算。在Main函数中,分别展示了不同对象调用重载Area方法的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.实例目标

2.编程思路

3.编程步骤


1.实例目标

  了解虚方法的定义以及使用

2.编程思路

  2.1 如果方法声明中包含修饰符virtual,就称该方法为虚方法;

  2.2 虚方法的实现会随着子类改变,子类的虚方法的实现过程叫做重载;

  2.3 虚方法在程序运行期才能决定要调用的实现方法,而非虚方法的调用,在程序的编译期就已决定了;

  2.4 在声明虚方法时,不能使用修饰符 static/abstract/override;

  2.5 在基类Geometry中定义虚方法Area,因为计算公式不同,所以在Geometry的子类Circle/Sphere/EquilatralTriangle中重载了Area方法。

3.编程步骤

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PRO20
{
    class Area
    {
        public class Geomtry
        {
            public const double p1 = Math.PI;
            protected double r;
            public Geomtry()
            {

            }
            public Geomtry(double x)
            {
                r = x;
            }

            //求面积,虚方法,子类可重载该方法
            public virtual double Area()
            {
                return r * r;
            }
            //圆
            public class Circle : Geomtry
            {
                public Circle(double r) : base(r)
                {

                }
                //重载求面积方法
                public override double Area()
                {
                    return p1*r*r;
                }
            }

            //球体
            public class Sphere : Geomtry
            {
                public Sphere(double r) : base(r)
                {

                }
                //重载求面积方法
                public override double Area()
                {
                    return 4*p1*r*r;
                }
            }
            //等边三角形
            public class EquilateralTriangle : Geomtry
            {
                public EquilateralTriangle(double r) : base(r)
                {

                }
                //重载求面积的方法
                public override double Area()
                {
                    return r*r*Math.Sin(p1/3.0)/2.0;
                }
            }
            public static void Main()
            {
                
                double r = 4.0;
                Geomtry a = new Geomtry(r);
                Geomtry c = new Circle(r);
                Geomtry s = new Sphere(r);
                Geomtry et = new EquilateralTriangle(r);

                Console.WriteLine("r={0},相应地",r);
                Console.WriteLine("正方形的面积为:{0}", a.Area());
                Console.WriteLine("圆的面积为:{0}", c.Area());
                Console.WriteLine("球体的表面积为:{0}", s.Area());
                Console.WriteLine("等边三角形的面积为:{0}", et.Area());

                Console.ReadKey();
            }
        }
      
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值