关闭

C# 继承

标签: 基类重写方法c#
337人阅读 评论(0) 收藏 举报
分类:

C# 继承

需求:定义多个N变形类,功能:打印多边形类型,计算面积,计算周长。

分析多边形性质:每种多边形计算面积和计算周长的方法不一致。

完成功能需求,每中类型的多边形类至少要定义三个方法
(1)打印类型方法
(2)计算面积方法
(3)计算周长方法

定义一个多边形基类,然后每种具体的多边形继承与多边形基类,按照自己特有性质,分别重写计算方法

下面例子:定义了一个多边形了,一个三角形类,一个正方形类

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

namespace InheritPro
{
    // 定义多边形基类
    public class PolygonClass
    {
        protected string polygonType = "";

        //初始化
        public PolygonClass()
        { }

        // 定义 Set、Get 方法给变量赋值
        public string PolygonType
        {
            get { return polygonType; }
            set { polygonType = value; }
        }

        //定义计算面积的虚方法,具体实现要在子类中重写
        //声明虚方法必须加关键字 virtual,否则无法在子类中重写
        //子类可以不重写基类的虚方法
        public virtual float Area()
        {
            return 0;
        }

        //定义计算周长的虚方法,具体实现要在子类中重写

        public virtual float Circumference()
        {
            return 0;
        }

        //打印多边形类型
        public virtual void Type()
        {
            Console.WriteLine("The polygon is : " + polygonType);
        }
    }

    // 多边形实例 - 三角形类,继承多边形类
    public class TriangleClass : PolygonClass
    {
        private int edge1; //三角形三条边
        private int edge2;
        private int edge3;

        public TriangleClass() { }

        // 定义方法给边赋值
        public void SetEdge(int edge1, int edge2, int edge3)
        {
            this.edge1 = edge1;
            this.edge2 = edge2;
            this.edge3 = edge3;
        }

        //重写计算面积方法,必须要加关键字 override
        public override float Area()
        {
            float s = (edge1 + edge2 + edge3) * 0.5f;
            float area = (float)Math.Sqrt(s * (s - edge1) * (s - edge2) * (s - edge3));
            return base.Area();
        }

        //重写周长算法
        public override float Circumference()
        {
            return edge1 + edge2 + edge3;
        }

        //重写打印类型的方法
        public override void Type()
        {
            base.Type(); //调用基类的方法

            Console.WriteLine("啦啦啦  我是 三角形");
        }
    }


    public class SquareClass : PolygonClass
    {
        public int edge;

        public SquareClass() { }

        public void SetEdge(int edge)
        {
            this.edge = edge;
        }

        public override float Area()
        {
            return edge * edge;
        }

        public override float Circumference()
        {
            return edge * 4;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            #region PolygonClass  TriangleClass
            //定义基类,可以实例化为 子类 TriangleClass 的实例
            PolygonClass polygonClass = new TriangleClass();
            //调用基类方法  PolygonType
            polygonClass.PolygonType = "Triangle";

            //由于 SetEdge 方法是在子类 TriangleClass 中定义的,
            //调用 SetEdge 方法时需要强制转换为 TriangleClass类型
            ((TriangleClass)polygonClass).SetEdge( 3, 4, 6);

            //调用求面积,求周长方法,实际调用的是 TriangleClass 
            //类中重写的 Area()、Circumference() 方法
            float area = polygonClass.Area();
            float circ = polygonClass.Circumference();

            //调用基类的 Type() 方法
            polygonClass.Type();
            Console.WriteLine(string.Format("area = {0},  circ = {1}", area, circ));
            Console.WriteLine("\n");
            #endregion

            #region PolygonClass SquareClass
            //同上将基类实例直接实例化为 子类  SquareClass 的实例
            polygonClass = new SquareClass();
            polygonClass.PolygonType = "Triangle";
            ((SquareClass)polygonClass).SetEdge(5);
            area = polygonClass.Area();
            circ = polygonClass.Circumference();

            polygonClass.Type();
            Console.WriteLine(string.Format("area = {0},  circ = {1}", area, circ));
            Console.WriteLine("/n");
            #endregion

            #region SquareClass
            //老老实实的定义  SquareClass 类实例
            SquareClass squareClass = new SquareClass();
            squareClass.PolygonType = "Triangle";
            squareClass.SetEdge(5);
            area = squareClass.Area();
            circ = squareClass.Circumference();

            squareClass.Type();
            Console.WriteLine(string.Format("area = {0},  circ = {1}", area, circ));
            Console.WriteLine("\n");
            #endregion

            Console.WriteLine("Polygon");
            Console.Read();
        }
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:323953次
    • 积分:5293
    • 等级:
    • 排名:第5157名
    • 原创:218篇
    • 转载:1篇
    • 译文:1篇
    • 评论:53条
    文章分类
    最新评论