C#笔记[ 六 ]:接口

Evernote Export

 

 
.................................. C#的接口 ...................................
接口
接口是一组方法槽,但是都没有提供实现; 接口名称以大写字母 I 开头
接口的成员
访问类型和修饰符:接口成员总是 public的,都不能使用修饰符
 
成员组成:接口没有构造函数、字段; 由 方法,属性,事件,索引器 自由组合; 方法没有方法体
[接口可以实现多继承,实例化接口的子类时,不知道调用哪一个接口的构造方法]
 
interfaceICompute
{
intId { get; set; }
stringName { get; set; }
voidTotal();
voidAvg();
eventEventHandler AddDetail;
}
 
 
可以实现/继承接口的类/结构
类/结构体:需要实现接口的全部成员, 抽象类:将不想实现的接口成员定义为 抽象成员
实现接口成员的两种方法
隐式实现接口成员:正常的,接口的成员总是 public,所以子类中实现的接口成员必须是 public
显示实现接口成员:实现接口成员的名称前+ 接口名称作为前缀;省略了 public 的访问修饰符
 
实现接口要不全部隐式,要不全部显示,因为调用实现的接口的成员的方式不一样
隐式实现的接口成员:使用类的实例来调用
显示实现的接口成员:使用接口的变量来调用,使用里氏装换原则,将类的实例赋值给接口变量
 
什么时候用抽象类,什么时候用接口
接口 :因为接口中没有字段,继承接口要实现接口中所有成员,所以接口只是:定义一种行为[因为没有字段所以是行为]规范,一种标准
抽象类:还能通过继承给子类某些字段
 
抽象类
接口
 
[ 有构造函数,不能被实例化 ]
[ 没有构造函数,不能被实例化 ]
成员
[ 可以使用任何修饰符 ];[ 可以定义任何成员 ];抽象方法不能有方法体
由 方法,属性,事件,索引器 自由组合,且访问修饰符总是 public
XXX的父类
抽象类能继承:实体类,抽象类,接口,密封类,但是只能继承自一个
接口只能继承接口,一个接口可以继承多个接口
XXX的子类
使用 抽象类/实现类 来继承抽象类
使用 实现类/抽象类/结构体 来继承接口
继承接口/
抽象类
1.抽象方法是什么类型,重写就是什么类型,与之对应
2.抽象类的子类必须重写抽象类中的所有抽象成员,要是不全部实现要将子类定义为抽象类
3.一个抽象类继承自一个抽象类,那要继承这个抽象类,要重写所有抽象类中所有抽象方法
1.接口成员默认的访问类型为 public
2.接口的子类必须实现接口的所有成员,要是不全部实现要将子类定义为抽象类
3.一个接口继承自一个接口,那要继承这个接口,要实现所有接口中的成员
 
interfaceICompute
{
intId { get; set; }
stringName { get; set; }
voidTotal();
voidAvg();
 
}
 
------------------------------------------------
// 抽象类实现接口 将不实现的接口成员定义为抽象成员
publicabstractclassClassA:ICompute
{
publicstringName { get; set; } // 隐式实现接口成员 Id属性
intICompute.Id { get; set; } // 显示实现接口成员 Name属性
 
voidICompute.Total() { } // 显示实现接口成员 Total()方法
 
publicabstractvoidAvg(); // 不实现接口成员 Avg(),定义为抽象成员
 
}
 
// 结构体实现接口 要实现接口的全部成员
structStruct: ICompute
{
privateintab; // 自己的非继承成员
publicintId { get; set; } // 隐式实现接口成员 Id属性
stringICompute.Name { get; set; } // 显示实现接口成员 Name属性
publicvoidTotal() // 隐式实现接口成员 Total()方法
{ }
voidICompute.Avg() // 显示实现接口成员 Total()方法
{ }
}
------------------------------------------------
 
 
// 类隐式实现接口的调用 : 要实现接口的全部成员
classClass1 : ICompute
{
privatedoubleenglish;// 自己的非继承成员
privatedoublechina;
publicdoubleEnglish
{
get { return english; }
set { english = value; }
}
publicdoubleChina
{
get { return china; }
set { china = value; }
}
publicintId { get; set; }
publicvoidTotal()
{
Console.WriteLine("总成绩为:" + (English + China).ToString());
}
publicvoidAvg()
{ }
}
Class1 class1 = newClass1();
class1.China = 88.5;
class1.English = 98.6;
class1.Total();
------------------------------------------------
 
// 类显示实现接口的调用
classClass2 : ICompute
{
privatedoubleenglish; // 自己的非继承成员
intICompute.Id { get; set; }
voidICompute.Total() // 不能加访问修饰符
{
Console.WriteLine("OK!");
}
voidICompute.Avg()
{ }
}
ICompute icompute = newClass2();
icompute.Total();
Console.ReadKey();
 
 
 
 
作者:大李子
邮箱:1185241994@qq.com
本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
 
 
posted @ 2021-03-07 15:39  大李子"  阅读(74)  评论(0)    收藏  举报