C# 继承

原创 2015年07月10日 14:30:11

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();
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

.Net C#(类的继承/虚函数/抽象函数/密封类/静态类/抽象类)——学习笔记

类的继承 隐藏基类的成员: 派生类不可以删除它继承的任何成员,但可以隐藏他们。 要声明新的相同类型的成员,并使用相同的名称。 要使用new修饰符,否则编译器会警告。静态成员...

C#高级编程第6版doc.第04章_继承

  • 2013年08月10日 19:05
  • 156KB
  • 下载

C# 继承 学习使用

  • 2012年04月03日 02:45
  • 1.6MB
  • 下载

C#2.0泛型编程之强制类型转换、继承和泛型

泛型和强制类型转换     隐式强制转换         C#编译器只允许将泛型参数隐式强制转换到object或泛型参数的约束指定的类型,代码如下 interface IMyInterface ...

C#继承OOP实例

  • 2015年11月09日 13:17
  • 1KB
  • 下载

c#中的面向对象继承

  • 2014年08月28日 20:12
  • 3.96MB
  • 下载

C# FORM继承体制、可视化编程解决方案

这个问题困扰了我有两年之久,一直在使用折中的方案、但限制依旧存在,这次终于可以解决了。心情很不错~.废话不多说,直接进入正题。   问题定义:在常规开发步骤中,WINDOW2继承WINDO...
  • tEQun1
  • tEQun1
  • 2015年04月10日 10:49
  • 514
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 继承
举报原因:
原因补充:

(最多只允许输入30个字)