您的位置:首页 > 编程语言 > C#

C# 抽象类

2015-07-10 15:05 357 查看

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: