前言
程序中多重继承非常常见,但是C#中的类不支持多重继承,为了避免多重继承给程序带来的复杂性问题,一般使用接口实现多重继承。
一、 接口的实现与继承
(1)创建一个接口项,定义编号ID和姓名Name两个属性和一个自定义方法Showinfo,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 接口使用
{
internal interface Interface1 //定义接口
{
string ID { get; set;} //编号(可读可写)
string Name { get; set; } //姓名(可读可写)
void Showinfo(); //定义方法,显示定义的编号和姓名
}
}
(2)创建一个控制台应用程序,Program类继承接口Interface1,实现接口中的所有属性和方法。在Main()函数中实例化Program类的一个对象,并使用该对象实例化Interface1接口,最后通过实例化的接口对象访问派生类中的属性和方法。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace 接口使用
{
internal class Program:Interface1 //继承接口
{
string id = "";
string name = "";
public string ID //编号
{
get { return id; }
set { id = value; }
}
public string Name //姓名
{
get { return name; }
set { name = value; }
}
public void Showinfo() //显示编号和姓名
{
Console.WriteLine(ID + "\t" + Name);
}
static void Main(string[] args)
{
Console.WriteLine("编号\t 姓名");
Program program = new Program(); //实例化Program类对象
Interface1 Interface2 = program; //使用派生类对象实例化接口Interface1
Interface2.ID = "001"; //为派生类中的ID赋值
Interface2.Name = " 李明"; //为派生类中的Name赋值
Interface2.Showinfo(); //调用派生类中的方法显示定义的属性值
Interface1 Interface3 = program; //使用派生类对象实例化接口Interface1,也可不重新实例化接口,使用Interface2
Interface3.ID = "002";
Interface3.Name = " 张三";
Interface3.Showinfo();
Console.Read();
}
}
}
(3)运行结果如下所示
二、接口的多重继承和实现
(1)创建一个程序台应用程序,声明三个接口:Interface1,Interface2,Interface3,接口Interface2和Interface3继承自Interface1,接口Interface1定义了姓名和性别两个属性,接口Interface2和Interface3定义了两中方法。如下所示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 接口多重继承
{
internal interface Interface1
{
string Name { get; set; }
string Sex { get; set; }
}
interface Interface2: Interface1
{
void Teach();
}
interface Interface3: Interface1
{
void Study();
}
}
(2)利用Program继承了这三个接口,并分别实现三个接口中的属性和方法。如下所示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 接口多重继承
{
internal class Program:Interface1,Interface2,Interface3
{
string name = "";
string sex = "";
public string Name
{
get { return name; }
set { name = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
public void Teach()
{
Console.WriteLine(Name + " " + Sex + " " + "教师");
}
public void Study()
{
Console.WriteLine(Name + " " + Sex + " " + "学生");
}
static void Main(string[] args)
{
Console.WriteLine("姓名" + " " + "性别" + " " + "教师/学生");
Program program = new Program();
Interface2 interface2 = program;
interface2.Name = "张三";
interface2.Sex = "男";
interface2.Teach();
Interface3 interface3 = program;
interface3.Name = "李四";
interface3.Sex = "男";
interface3.Study();
Console.Read();
}
}
}
(3)运行结果如下: