一、多接口同名成员 核心规则
1. 两种重名情况区分(必考)
情况1:同名、同类型
多个接口存在名称相同、数据类型也相同的属性/方法 → 只需要实现一次(隐式实现即可)。
案例:IA 和 IB 都有 string B {get;set;}
// 两个接口同名同类型,实现一次即可
public string B { get; set; }
情况2:同名、不同类型(冲突核心)
多个接口 名称相同、返回/数据类型不同 → 必须使用【显式实现】,否则编译器无法区分,直接报错。
案例:
-
IA 中:string C {get;set;}
-
IB 中:int C {get;set;}
2. 显式实现 固定语法 & 硬性规则
// 显式实现格式:接口名.成员名
string IA.C { get; set; }
int IB.C { get; set; }
显式实现三大铁律
-
❌ 不能加任何访问修饰符(默认私有)
-
必须格式:接口名.成员
-
只能通过 接口变量 访问,不能通过子类对象直接访问
3. 普通成员(方法)同名重载
IA 无参 F1、IB 有参 F1,属于方法重载,直接正常实现即可,无需显式实现。
public void F1(){}
public void F1(int a){}
二、代码调用逻辑解析
// 向上转型为IA接口类型 → 访问 IA的string C
IA t1 = new Test();
t1.C = "11";
// 向上转型为IB接口类型 → 访问 IB的int C
IB i1 = new Test();
i1.C = 10;
核心:显式实现的成员,由【变量的接口类型】决定调用哪一个。
三、接口的继承(接口多继承)
1. 规则
接口可以继承接口(支持多继承);
当类实现子接口时,必须实现【所有父接口+子接口】的全部成员。
2. 案例代码
// 父接口
interface IC
{
string B { get; set; }
}
// 子接口继承父接口
interface IQ : IC
{
int C { get; set; }
}
// 实现子接口,必须实现父子所有成员
class Test1 : IQ
{
public int C { get; set; } // 子接口IQ成员
public string B { get; set; } // 父接口IC成员
}
总结口诀
实现子接口,必扛全家成员(父、子接口全部实现)
四、接口 VS 抽象类(最全对错对比)
相同点
-
1. 都 不能被实例化
-
2. 都可以包含 未实现的抽象成员,由派生类实现
不同点(考试必背)
|
成员类型 |
可包含普通方法、抽象方法、字段、属性 |
无字段,只有属性、方法、事件、索引器 |
|
实现/继承数量 |
类 只能单继承 |
类 可以多实现 |
|
重写方式 |
必须使用 override 重写 |
直接实现,不需要 override |
|
访问修饰符 |
支持所有访问修饰符(public/private等) |
全部默认public,不能手动写修饰符 |
|
主体功能 |
代码复用 + 定义规范 |
纯规范、纯标准、解耦 |
五、终极满分总结(多接口核心)
-
同名同类型,实现一次就够用
-
同名不同类型,必须显式来实现
-
显式实现无修饰,仅靠接口变量访问
-
接口可多继承,子类实现包揽全家


