【C#中抽象类和接口的使用例子】
一个完整的例子:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
///<summary>
/// 接口的例子,接口是顶层设计//////////////////////////
///</summary>
interface IAnimal //顶层接口
{
void eating();
//接口中声明的方法,这里不可以用static,abstract修饰
}
abstract class Bird :IAnimal //抽象类Bird继承了IAnimal接口
{
public void eating() { Console.WriteLine("会吃!"); } //抽象类实现了接口的方法,且必须实现该方法
abstract public void flying(); //抽象类自己又定义了一个抽象方法
}
class Chick : Bird //Chick类是抽象类Bird的派生类
{
public int chibangnumber;
public Chick()
{
Console.WriteLine("这是一个小鸡!");
chibangnumber = 2;
}
//实现了抽象类的flying方法,用override
public override void flying()
{ Console.WriteLine("会飞行!"); }
};
///<summary>
/// 多层次抽象类的例子,包含三层关系,抽象类A,抽象类B继承抽象类A,类C继承抽象类B
/// 例子中的抽象类既包含抽象方法,也包含普通成员,还有构造函数
///</summary>
abstract class A //抽象类A的声明
{
public int x; //普通公有成员
public A(int m) { x = m; } //抽象类A的构造函数
abstract public int fun1(); //抽象方法fun1()声明
}
abstract class B : A //类B仍是抽象类
{
public B(int m):base(1) { x = m; } //抽象类A的构造函数
abstract public int fun2(); //增加了一个抽象方法fun2()
public abstract int px { get;set; } //定义抽象属性px,可读可写
public abstract int py { get; } //定义抽象属性py,只读
}
class C: B //类C,继承于抽象类B,必须实现所有的抽象方法
{
int y, z;
public C(int x1, int y1):base(x1) //构造函数
{ y = x1; z = y1; }
public override int fun1() //抽象方法fun1实现
{ return x * y; }
public override int fun2() //抽象方法fun2实现
{ return x / y; }
public override int px //抽象属性px的实现
{
get
{
try { return x+10; }
catch {throw new Exception("The method or operation is not implemented."); }
}
set
{ try { x = value; }
catch { throw new Exception("The method or operation is not implemented."); }
}
}
public override int py //抽象属性py的实现
{
get
{ try { return y-10; }
catch{ throw new Exception("The method or operation is not implemented."); }
}
}
}
class Program //主程序
{
static void Main(string[] args)
{
//类的使用
Chick ch = new Chick();
ch.eating();
ch.flying();
Console.WriteLine("翅膀个数是:{0}", ch.chibangnumber);
//多层次抽象类举例
C c = new C(5,2); //创建类c的对象C
Console.WriteLine("{0},{1}", c.fun1(),c.fun2());
Console.WriteLine("{0}", c.x);
Console.WriteLine("{0},{1}", c.px,c.py); //调用抽象属性
}
}
}
运行结果:
这是一个小鸡!
会吃!
会飞行!
翅膀个数是2
25,1
5