概述
1.定义接口
在 C# 语言中,类之间的继承关系仅支持单重继承,而**接口是为了实现多重继承关系**设计的。
一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承。
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。
接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构
多重继承的概念:
多重继承指的是一个类可以同时继承多个类。(多重继承在C++中支持,在C#和Java中不支持)
接口定义语法:
interface 接口名称
{
接口成员;
}
其中:
1) 接口名称
通常是以 I 开头,再加上其他的单词构成。例如创建一个计算的接口,可以命名为ICompute
2) 接口成员
接口中定义的成员与类中定义的成员类似。
接口中定义的成员必须满足以下要求。
-
接口中的成员不允许使用 public、private、protected、internal 访问修饰符。
-
接口中的成员不允许使用 static、virtual、abstract、sealed 修饰符。
-
在接口中不能定义字段。
-
在接口中定义的方法不能包含方法体。
例:
定义一个接口IWorker,其中包含一个动作叫DoWork;
interface IWorker
{
void DoWork();
}
2.接口实现
1.接口的实现
接口的实现是通过继承的方式进行实现。
接口实现需要注意的地方:
-
接口继承接口之后具有父接口的全部成员。
-
类继承接口之后需要实现接口的全部成员方法。否则需要将该类定义为抽象类,
-
未实现的接口方法定义为抽象方法。
-
继承时基类和接口之间,接口和接口之间以逗号分隔
例:
class Person
{
public Person()
{
name = "怡宝";
age = 18;
sex = "男";
}
public string name;
public int age;
public string sex;
public void PrintPersonInfo(){
Console.WriteLine("姓名:{0},性别:{1},年龄:{2}",name,age,sex);
}
public override string ToString()
{
return string .Format("姓名:{0},性别:{1},年龄:{2}",name,age,sex);
}
}
//Student类继承于Person类和IWorker接口
class Student:Person,IWorker
{
public Student()
{
classRoom = "204";
course = "计算机";
}
string classRoom;
string course;
public void PrintStudentInfo()
{
base.name = "张无忌";
base.PrintPersonInfo();
Console.WriteLine("班级:{0},课程:{1}",classRoom,course);
}
//base的使用
public override string ToString(){
return string.Format("{0}n姓名:{1},性别:{2},年龄:{3},班级:{4},课程:{5}",base.ToString(),name,age,sex,classRoom,course);
}
public void DoWork(){
Console.WriteLine("在学习");
}
}
// 新增教师类,继承于Person类和IWorker接口
class Teacher : Person,IWorker
{
public Teacher(string course)
{
this.course = course;
}
string course;
public override string ToString()
{
//在名字后面加后缀
base.name += "老师";
return string.Format("{0}n教授课程:{1}", base.ToString(), course);
}
//实现从接口继承的方法
public void DoWork()
{
Console.WriteLine("正在上课");
}
}
//主函数
static void Main(string[] args)
{
Student stu = new Student();
Teacher tea = new Teacher("计算机");
PrintValue(stu);
PrintValue(tea);
}
//修改参数类型为接口IWorker
static void PrintValue(IWorker p){
Console.WriteLine(p.ToString());
p.DoWork();
}
2.实现接口方式
接口的实现分为两种:显式实现接口和隐式实现接口
1)显式实现接口
显式实现接口需要使用接口名作为方法名的前缀。
注意事项:
a.显式实现接口时不需要指定访问修饰符。
b.显式实现的接口在调用时必须使用接口对象。
比如修改学生类显式实现接口:
//Student类继承于Person类和IWorker接口
class Student:Person,IWorker
{
// 省略
//实现从接口继承的方法
void IWorker.DoWork()
{
Console.WriteLine("在学习");
}
}
Student stu = new Student();
//stu.DoWork(); 无法调用
IWorker worker = new Student();
worker.DoWork();
2)隐式实现接口
隐式实现接口不需要使用接口名作为方法名的前缀,但需要添加访问修饰符public
3)总结
-
当类实现一个接口时,通常使用隐式接口实现,这样可以方便的访问接口方法和类自身具有的方法和属性。
-
当类实现多个接口时,并且接口中包含相同的方法签名,此时使用显式接口实现。
-
隐式接口实现,类和接口都可访问接口中方法。显式接口实现,只能通过接口访问
3.接口中多态的实现
多态能使用类之间的继承关系来实现,通过多个类继承同一个接口,并实现接口中的成员也能完成多态的表示。
使用接口实现多态 需要满足以下两个条件。
-
定义接口并使用类实现了接口中的成员。
-
创建接口的实例指向不同的实现类对象。
例:
/// <summary>
/// 绘制图形的接口中包括图形面积、坐标、颜色属性,
/// 并编写一个方法输出图形的描述
/// </summary>
interface IShape
{
/// <summary>
/// 面积
/// </summary>
double Area{get;}
/// <summary>
/// X坐标
/// </summary>
double X{get;set;}
/// <summary>
/// 坐标Y
/// </summary>
double Y{get;set;}
/// <summary>
/// 颜色
/// </summary>
string Color{get;set;}
/// <summary>
/// 绘制方法
/// </summary>
void Draw();
}
/// <summary>
/// 矩形类,实现了接口IShape
/// </summary>
class Rectangle:IShape
{
//为矩形的长和宽赋值
public Rectangle(double length,double Width)
{
this.Length = length;
this.Width = Width;
}
//定义长方形的长度
public double Length(get;set;);
//定义长方形的宽度
public double Width { get; set; }
public double Area{
get{
return Length*Width;//计算长方形面积
}
}
public string Color{get;set;}
public double X{get;set;}
public double Y{get;set;}
public void Draw()
{
Console.WriteLine("绘制图形如下:");
Console.WriteLine("在坐标 {0},{1} 的位置绘制面积为 {2} 颜色为 {3} 的矩形", X, Y, Area, Color);
}
}
/// <summary>
/// 圆类,实现了接口IShape
/// </summary>
class Circle:IShape
{
//为圆的半径赋值
public Circle(double radius)
{
this.Radius = radius;
}
public double Radius{get;set;}
public double Area
{
get
{
return Radius*Radius*3.14;
}
}
public string Color{get;set;}
public double X{get;set;}
public double Y{get;set;}
public void Draw()
{
Console.WriteLine("绘制图形如下:");
Console.WriteLine("在坐标为 {0},{1} 的位置绘制面积为 {2} 颜色为 {3} 的圆 形", X, Y, Area, Color);
}
}
class Program
{
static void Main(string[] args)
{
IShape shape1 = new Rectangle(10,20);
shape1.X = 300;
shape1.Y = 500;
shape1.Color = "红色";
shape1.Draw();
Ishape shape2 = new Circle(10);
shape2.X = 300;
shape2.Y = 500;
shape2.Color = "蓝色";
shape2.Draw();
}
}
最后
以上就是虚拟小虾米为你收集整理的C#精挑整理知识要点8 接口(建议收藏)的全部内容,希望文章能够帮你解决C#精挑整理知识要点8 接口(建议收藏)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复