CSharp多接口实现:重名成员:显式实现:接口继承与抽象类和接口区别说明

作者:袖梨 2026-06-08

一、核心知识点前置(必考)

1. 多接口冲突场景

C#多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别说明

当一个类同时实现多个接口,出现:同名但返回类型不同的属性/方法 → 必须使用 接口显式实现

2. 显式实现规则

  • 格式:接口名.成员名
  • 不能加 public 修饰符(默认私有)
  • 只能通过 对应接口变量 访问,不能通过类对象访问

3. 隐式实现

同名、同类型成员,只需要实现一次,所有接口共用。

二、冲突接口定义 IA、IB

interface IA 
{ 
    int A { get; set; }
    string B { get; set; }
    string C { get; set; }
    void F1();
}
interface IB
{
    string B { get; set; }
    int C { get; set; }
    void F1(int a);
}

冲突分析

1. B 属性:IA、IB 都是 string B → 同名同类型 → 无需冲突,隐式实现一次即可

2.C 属性

  • IA:string C
  • IB:int C

同名、类型不同 → 严重冲突,必须显式实现

3. F1 方法:方法签名不同(无参/有参),属于重载,不冲突

三、Test 类实现多接口(核心考点)

class Test:IA, IB
{
    // 隐式实现:共用同名同类型成员
    public int A { get; set; }
    public string B { get; set; }

    // 显式实现 IA 的 C(string类型)
    string IA.C { get; set; }

    // 显式实现 IB 的 C(int类型)
    int IB.C {  get; set; }

    // 无参F1 实现 IA
    public void F1()
    {

    }

    // 有参F1 实现 IB
    public void F1(int a)
    {

    }
}

逐行解析

1. public string B

两个接口 B 都是 string 类型,实现一次,两个接口共用

2. string IA.C {get;set;}

显式实现 IA 的 C 属性,无访问修饰符

3. int IB.C {get;set;}

显式实现 IB 的 C 属性,无访问修饰符

4. 两个 F1 方法参数不同,构成方法重载,分别对应两个接口

显式实现核心规则(背诵)

多个接口:名字相同、类型不同 = 必须显式实现

多个接口:名字相同、类型相同 = 实现一次共用

四、Main 方法调用解析

IA t1 =  new Test();
t1.C = "11";  // 调用 IA的 string C

IB i1 = new Test();
i1.C = 10;    // 调用 IB的 int C

原理

显式实现的成员 只能通过对应接口变量访问

  • 1. 接口 IA 变量 → 只能找到 IA.C(string)
  • 2. 接口 IB 变量 → 只能找到 IB.C(int)
  • 3. 不能用 Test 类对象直接点 C,会报错

五、接口的继承(接口拓展)

interface IC
{
    string B { get; set; }
}
interface IQ : IC
{
    int C { get; set; }
}

知识点

接口可以继承接口

IQ 继承 IC,意味着:

IQ 接口包含自己的所有成员 + 父接口 IC 的所有成员

六、类实现继承接口(必须实现全部层级成员)

class Test1 : IQ
{
    public int C { get ; set ; }
    public string B { get; set; }
}

规则(必考原话)

如果一个类实现了子接口,子接口继承了父接口,当前类必须实现【所有父接口+子接口】的全部成员

Test1 实现 IQ,IQ 继承 IC

所以必须实现:

IC 的 B 属性 + IQ 的 C 属性

七、接口 VS 抽象类(满分简答题标准答案)

相同点

  • 1. 都不能被实例化
  • 2. 都可以包含未实现的成员,由派生类实现

不同点(逐条背诵)

1. 成员结构不同

  • 抽象类:可以有普通成员(有方法体)、字段、抽象成员
  • 接口:全部成员都是抽象、无实现

2. 继承数量不同

  • 抽象类:类只能单继承
  • 接口:类可以多实现

3. 重写方式不同

  • 抽象类:子类必须用 override 重写

  • 接口:直接实现,不需要 override

4. 访问修饰符不同

  • 抽象类:可以使用任意访问修饰符

  • 接口:成员默认public,不能手动写修饰符

5. 成员类型不同

  • 抽象类:可以有 字段、属性、方法

  • 接口:不能有字段,只能有属性、方法

对比维度

抽象类 abstract

接口 interface

成员类型

可以有普通方法、字段、属性、抽象方法

只能有属性、方法,不能有字段、普通实现

继承数量

单继承,一个类只能继承一个抽象类

多实现,一个类可实现无数接口

重写方式

必须用 override 重写

直接实现,不需要 override

访问修饰符

支持所有访问修饰符

默认public,不能手动修改

主体功能

代码复用、模板类

规范、行为约束、多态

八、终极总结口诀

  • 多接口同名同类型,实现一次就够用
  • 多接口同名不同型,显式实现分清楚
  • 显式实现无修饰,只能接口变量读
  • 接口可多可继承,全部成员要实现
  • 抽象有体有字段,接口全抽

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

您可能感兴趣的文章:
  • C#抽象类 (abstract class) vs 接口 (interface) 选型与应用场景分析
  • c#抽象类和接口的区别小结
  • 基于C#实现任意格式JSON文本的HTTP交互抽象类
  • C#抽象类的用法介绍
  • C#中的WebRequest与WebResponse抽象类、DNS静态类、Ping类介绍
  • 浅谈C# 抽象类与开闭原则

相关文章

精彩推荐