C# 接口interface的实现(多接口、同名冲突、继承+接口)
作者:影寂ldy
本文主要介绍了C# 接口interface的实现(多接口、同名冲突、继承+接口),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一、接口 核心概念
接口(interface):是一套行为规范/标准,只定义成员声明,不写实现。
类/结构体实现接口,必须实现接口中所有成员。
接口核心特点(必考)
- 接口 不能实例化
- 接口中所有成员 默认是公共、未实现
- 接口 支持多实现(多继承)(解决类单继承问题)
- 接口只包含:属性、方法、事件、索引器(不能有字段)
- 接口命名规范:以 I 大写开头(IBook、IPaper、IPeople)
二、基础语法与定义
1. 接口定义
//书的接口:规范书本必须拥有的属性和方法
interface IBook
{
int Id { get; set; }
int Name { get; set; }
void F1();
}
//纸张的接口:规范纸张必须拥有的属性和方法
interface IPaper
{
string color { get; set; }
void F2();
}
2. 关键字区分(超级重点)
- 类 : 类 → 叫 继承(单继承)
- 类 : 接口 → 叫 实现(多实现)
三、多接口实现(一个类实现多个接口)
C# 类只能单继承,但可以实现无数个接口,解决多继承问题。
完整实现代码
// Book类 同时实现 IBook、IPaper 两个接口
class Book : IBook, IPaper
{
// 实现IBook接口属性
public int Id { get; set; }
public int Name { get; set; }
// 实现IPaper接口属性
public string color { get; set; }
// 实现IBook方法
public void F1()
{
}
// 实现IPaper方法
public void F2()
{
}
// 类自己的扩展属性(接口没有)
public string StudentId { get; set; }
}
规则
实现多个接口时,必须重写/实现所有接口的所有属性和方法,缺一不可。
四、接口同名成员冲突问题(重点难点)
1. 场景介绍
父类 Book 中已经存在 StudentId 属性
新接口 IPeople 中也定义了同名 StudentId 属性
interface IPeople
{
string StudentId { get; set; }
}
2. 子类继承父类 + 实现接口
SmallBook 继承 Book、同时实现 IPeople
class SmallBook : Book, IPeople
{
// 父类Book已经有StudentId
// 满足接口IPeople的成员要求,所以【不用重复实现】
// 如果想要重新实现接口、覆盖父类属性,需要加 new
public new string StudentId { get; set; }
}
核心规则(必背)
- 如果父类已经拥有和接口同名同返回值的成员
- 子类继承父类后,默认自动满足接口要求,不需要重写
- 如果想要重新实现、覆盖父类成员,使用 new 隐藏
五、接口 VS 抽象类(高频面试)
- 接口:全是抽象规则(无实现),支持多实现
- 抽象类:可以有普通成员、抽象成员,只能单继承
六、完整可运行测试代码(我帮你补全 Main 调用)
internal class Program
{
static void Main(string[] args)
{
// 1. 实例化实现多接口的类
Book b = new Book();
b.Id = 1;
b.Name = 1001;
b.color = "白色";
b.StudentId = "S1001";
b.F1();
b.F2();
// 2. 子类继承父类 + 实现新接口
SmallBook sb = new SmallBook();
sb.StudentId = "S2002"; // new 新属性
Console.WriteLine("Book颜色:" + b.color);
Console.WriteLine("子类StudentId:" + sb.StudentId);
}
}
七、满分必考总结
- 接口 不能 new、不能实例化
- 接口 全部成员默认公共、无实现
- 类实现接口 必须实现全部成员
- 类支持 多接口实现,只能单类继承
- 父类已有同名成员,子类实现接口可免实现
- 想要覆盖父类成员,使用 new 关键字隐藏
八、背诵口诀
接口定规范,无体不能实例化;单类继承多接口,父有同名不用写;想要覆盖加 new,多态扩展最灵活
到此这篇关于C# 接口interface的实现(多接口、同名冲突、继承+接口)的文章就介绍到这了,更多相关C# 接口interface内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
