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

对C#继承的理解

C# 继承的理解
  • u010533180
  • u010533180
  • 2016年09月30日 10:39
  • 6739

C#继承窗体

C#继承窗体 1、继承窗体的概念 继承窗体就是根据现有窗体的结构创建一个与其一样的新窗体,这种从现有窗体继承的过程称为可视化继承。 2、创建继承窗体 1)新建一个项目,添加一个Windows窗...
  • sygdp21
  • sygdp21
  • 2014年07月08日 18:12
  • 1223

c# 继承的本质

今天和大家解释一下什么叫继承,估计好多人都只知道怎么用,对于大多数开发者来说,它应该比较熟悉,估计是作为面向对象的三大要素之一吧,所以这是很多人对于继承的最直接的认识吧。大学课本里老生常谈。出来工作又...
  • u012565990
  • u012565990
  • 2016年08月09日 22:27
  • 1557

C#方法继承

        面向对象机制为C#的方法引入了virtual,override,sealed,abstract四种修饰符来提供不同的继承需求。        类的虚方法是可以在该类的继承自类中改变其实...
  • sunzhenlin2008
  • sunzhenlin2008
  • 2008年05月21日 14:22
  • 2717

C#中的继承举例

源码: using System; namespace Inherit { public class Person { public string name; //...
  • u014581901
  • u014581901
  • 2016年04月04日 14:29
  • 477

C#----使用继承选择器创建继承窗体

欢迎大家提出意见,一起讨论! 转载请标明是引用于 http://blog.csdn.net/chenyujing1234 代码(VS2008): http://www.rayfile.com/z...
  • chenyujing1234
  • chenyujing1234
  • 2012年05月10日 22:17
  • 8496

C# 结构Struct可以继承接口Interface

public struct MyS : IStruct         {             public void SayHello()             {          ...
  • ISaiSai
  • ISaiSai
  • 2013年01月23日 15:13
  • 2367

C# 泛型类的继承

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst...
  • limlimlim
  • limlimlim
  • 2015年02月27日 15:38
  • 5453

C# 简单的方法与属性的继承

初学C#,有些东西不是很懂,在zhex
  • matengzy
  • matengzy
  • 2014年07月28日 10:46
  • 2533

c#重写,覆盖,隐藏,重载,继承

1.重写和覆盖:在c#中这两个是一个意思,重写就是覆盖,覆盖就是重写 2.隐藏:隐藏就是子类与父类的方法一样(子类函数名前加一个new),并且子类不是虚方法,那么子类就会隐藏父类方法 3.重载:方法名...
  • qq131530624
  • qq131530624
  • 2016年09月10日 10:41
  • 1412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 继承
举报原因:
原因补充:

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