C# 抽象类

原创 2015年07月10日 15:05:25

C# 抽象类

定义一个多边形的抽象类,定义抽象类的子类

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

namespace AbstractClass
{

    //定义多边形抽象类
    public abstract class PolygonClass
    {
        //抽象类中可以定义字段,定义方法,以及非抽象方法的实现

        //定义类型名字段
        protected string polygonType;

        //定义 set、get 方法
        public string PolygonType
        {
            get { return polygonType; }
            set { polygonType = value; }
        }

        //定义计算面积的抽象方法,不能在抽象类中实现抽象方法
        //只能在其非抽象类的子类中写抽象方法的实现
        public abstract float Area();

        //定义计算周长的抽象方法
        public abstract int Circumference();


        //定义虚方法,并且实现
        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;
        }

        //在非抽象的基类中必须实现基类中的抽象方法
        //重写基类的抽象方法 Area(),必须使用关键字 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 area;
        }

        //在非抽象的基类中必须实现基类中的抽象方法
        //重写基类的抽象方法 Circumference(), 必须使用关键字 override
        public override int Circumference()
        {
            return edge1 + edge2 + edge3;
        }

        //重写基类的虚方法,必须使用关键字 override
        //虚方法可以不重写
        public override void Type()
        {
            base.Type(); //调用基类中的 Type() 方法
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //下面写法错误,抽象类不能实例化
            //PolygonClass polygonClass = new PolygonClass();

            //定义抽象类实例,实例化为 TriangleClass 的实例
            PolygonClass polygonClass = new TriangleClass();

            //调用基类中设置类型的方法
            polygonClass.PolygonType = "Triange";

            //调用基类中的设置边长方法
            ((TriangleClass)polygonClass).SetEdge(6, 8, 10);

            //调用计算面积方法,实际调用的是基类 TriangleClass 中重写的 Area() 方法
            float area = polygonClass.Area();

            //调用计算面积方法,实际调用的是基类 TriangleClass 中重写的 Circumference() 方法
            int circum = polygonClass.Circumference();

            //调用基类中打印类型的方法
            polygonClass.Type();
            Console.WriteLine(string.Format("area  = {0}, circum = {1}", area, circum));
            Console.WriteLine("\n");


            //定义 TriangleClass 类实例,实例化为 TriangleClass 的实例
            TriangleClass criangleClass = new TriangleClass();

            //调用基类中设置类型的方法
            criangleClass.PolygonType = "Triange";

            //调用基类中的设置边长方法
            criangleClass.SetEdge(6, 8, 10);

            //调用计算面积方法,实际调用的是基类 TriangleClass 中重写的 Area() 方法
            area = criangleClass.Area();

            //调用计算面积方法,实际调用的是基类 TriangleClass 中重写的 Circumference() 方法
            circum = criangleClass.Circumference();

            //调用基类中打印类型的方法
            criangleClass.Type();
            Console.WriteLine(string.Format("area  = {0}, circum = {1}", area, circum));
            Console.WriteLine("\n");

            Console.Read();
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

浅析C#中抽象类和接口的区别

文章《浅析C#中接口的重要性》中讲述了如何声明和使用接口。但是C#具有abstract关键字形成的抽象类,那么二者我们该如何选择呢!C#允许把类和函数声明为abstract。抽象类不能实例化,而抽象函...
  • wangshubo1989
  • wangshubo1989
  • 2015年09月01日 09:00
  • 3396

C#OOP之八 继承 接口和抽象类

继承 在现实生活中有所谓的“种瓜得瓜、种豆得豆”的说法,在生物学概念上就是“遗传”的概念,在面向对象中“继承”就类似于生物学中的遗传,通过继承,可以更好的实现代码的重用(复用,多次使用的意思)、增加...
  • zhangchen124
  • zhangchen124
  • 2016年04月28日 18:24
  • 3981

C#中抽象类(abstract)的实例引用

using System; using System.Collections.Generic; using System.Text; using System.Threading; names...
  • XueminXu
  • XueminXu
  • 2013年05月28日 21:44
  • 1785

C# abstract抽象类的作用(使用场景)

对于C#初学者来说,abstract抽象类在网上的定义和解释说了一大堆,却往往我们忽视了为何要使用abstract类,使用它的意义在哪里。面试的时候也会有人问起 使用它有什么好处,因为不适用它用自己...
  • ZorroBubble
  • ZorroBubble
  • 2013年11月27日 23:17
  • 2371

C#的抽象类和接口的区别,在什么时候使用才合适?

原文地址:http://www.cnblogs.com/seapub/archive/2012/08/08/2628433.html 理解抽象类   abstract class和...
  • KingSea168
  • KingSea168
  • 2016年07月09日 15:13
  • 981

C# 抽象类与抽象方法的作用与实例

在C#中,允许把类和方法声明为抽象类与抽象方法,具体的声明方法是在类名或方法名前加上abstract关键字。 那么我们什么时候应该用抽象类呢? 如果一个类设计的目点是用来被其它类继承的,它代表一类对象...
  • ryong1267
  • ryong1267
  • 2015年08月16日 21:16
  • 137

C#中的抽象类和抽象方法

一、抽象类和抽象方法的概念         在基类中的虚方法有时候不可能被调用到,而只是表达一种抽象的概念,用以为它的派生类提供一个公共的界面。 C#中引入了抽象类(abstract class)的概...
  • zjx86320
  • zjx86320
  • 2014年02月26日 14:55
  • 1851

C# 抽象类和抽象方法知识总结

1 抽象类不能被实例化  定义抽象类AbstractClass: abstract class AbstractClass { public abstract void AbstractM...
  • tiana0
  • tiana0
  • 2013年11月20日 21:49
  • 4852

c#中抽象类和虚方法的区别?

你说的是抽象类和虚方法吧! 其实这是哲学的思维方式,所谓哲学就是建立事实基础上,是人类对世界的思考和认识。 要理解抽象类就必须要有一定的编程经验,就好像要理解哲学就需要有一定的生活经验。跟一个没有...
  • juelingfeng
  • juelingfeng
  • 2014年08月07日 13:25
  • 1328

C#与java中对抽象类、接口的继承和重写区别

C#: 一、继承 什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。 1、继承C#中的类:C#不支持多重继承,C#类始终继承...
  • nma_123456
  • nma_123456
  • 2015年06月02日 11:39
  • 1387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 抽象类
举报原因:
原因补充:

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