标签:each alt 直接 特定 技术 set people 多少 同方
接触C#也有一段时间,对于接口的认知仅仅停留在认识阶段,好像不写出来,就不知道自己到底了解多少一样,下面我把我对于C#接口的认知与大家分享一下,望大家批评指正。
定义:是一种用来定义程序的协议,用来描述可属于任何类或结构的一组相关行为,由方法、属性、事件和索引器4种成员类型的任何组合构成,但不包含字段。
a. 通过接口可以实现多重继承,这就解决了C#中类可以同时继承多个基类的问题。类、结构、接口自身都可从多个接口继承。
b. 接口可以包含方法、属性、事件和索引器作为成员,但接口成员不需要任何修饰符,即不能有public、protected、internal、private、new、static、abstract、override、virtual等修饰符。原因:接口里面的内容需要继承它的类或结构去实现,因此其修饰符必须是public,而C#接口成员默认是public。特别注意一点,当子接口继承父接口,这2个接口中有相同的方法时,子接口要用new关键字隐藏父接口中的方法。
c. 接口没有构造函数,不能直接实例化接口。
d. 接口类似于抽象基类:继承接口的任何非抽象类型必须实现接口中的所有成员。
e. 显示接口成员实现。使用原因:如果类实现两个接口,并且两个接口有相同签名成员,类中实现时两个接口都会用该成员作为实现,那么如果实现不同功能,就可能导致要给接口实现不正确或两个都不正确,因此需要显示地实现接口成员,即创建一个仅通过该接口调用并特定于该接口的成员。
f. 显示接口成员实现不能包好访问修饰符、abstract、virtual、override或static修饰符。
g. 显示接口成员属于接口成员,不属于类成员。因此,不能用类对象直接访问,只能通过接口对象来访问。
interface People
{
string Name { get; set; }
string Sex{ get; set; }
void Study();
}
interface MathTeacher: People //接口MathTeacher继承接口People
{
void Teach();
}
interface EnglishTeacher: People//接口EnglishTeacher继承接口People
{
void Teach();
}
interface Student : People//接口Student继承接口People,
{
new void Study();//父子接口有相同方法,子接口用new隐藏父接口方法
}
class PerfectPeople : People, MathTeacher, EnglishTeacher, Student
//继承自接口PeopleMathTeacher, EnglishTeacher, Student
{
string name = "";
string sex = "";
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string Sex
{
get
{
return sex;
}
set
{
sex = value;
}
}
public void Study()
{
Console.WriteLine(Name+ Sex +"可以自主学习");
} //实现Study方法
void MathTeacher.Teach()
{
Console.WriteLine(Name + Sex + "可以教数学");
}//显示接口成员实现
void EnglishTeacher.Teach()
{
Console.WriteLine(Name + Sex + "可以教英语");
}//显示接口成员实现
}
class Program
{
static void Main(string[] args)
{
PerfectPeople perfectPeople = new PerfectPeople();//实例化接口继承类对象
Student student = perfectPeople;//使用接口继承类实例化接口Student
student.Name = "肖奈";
student.Sex = "男";
student.Study();
MathTeacher mathTeacher = perfectPeople;//使用接口继承类实例化接口MathTeacher
mathTeacher.Name = "叶凌天";
mathTeacher.Sex = "男";
mathTeacher.Teach();
EnglishTeacher englishTeacher = perfectPeople;//使用接口继承类实例化接口EnglishTeacher
englishTeacher.Name = "贝微微";
englishTeacher.Sex = "女";
englishTeacher.Teach();
Console.ReadLine();
}
}
结果如下图
标签:each alt 直接 特定 技术 set people 多少 同方
原文地址:https://www.cnblogs.com/nanzhixin/p/9186415.html