C# 接口 Interface 基础入门与实现详解

宋时安
宋时安
发布时间:2026-10-14| 4人浏览过
原创

了解 C# 中接口(Interface)的定义、特点及其与抽象类的区别,通过完整代码示例学习如何实现单接口、多接口继承及安全的类型转换方法。

接口与抽象类的核心区别

接口是 C# 面向对象编程中的重要概念,主要用于定义行为规范。它与抽象类有显著差异:首先,抽象类可以包含具体方法和抽象方法,且必须至少有一个抽象方法;而接口在传统定义中不包含方法的具体实现。其次,抽象类支持构造函数和析构函数,接口则不支持。最后,一个类只能继承一个抽象类,但可以实现多个接口。

接口中的成员默认具有 public 访问修饰符,因此无需显式声明。此外,不能直接创建接口的实例,例如 IPerson xx = new IPerson(); 会导致编译错误。

<summary>
/// interface
/// 与抽象类的区别:
/// 1. abstract可以有具体方法和抽象方法(必须有一个抽象方法),interface没有方法实现
/// 2. abstract可以有构造函数和析构函数,接口不行
/// 3. 一个类可以实现多个interface,但只能继承一个abstract
/// 特点:
/// - interface成员隐式具有public,所以不加修饰符
/// - 不可以直接创建接口的实例
</summary>
public interface IPerson
{
    string Name { get; set; } // 属性
    DateTime Brith { get; set; }
    int Age(); // 方法
}

interface IAdderss
{
    uint Zip { get; set; }
    string State();
}

实现多个接口与接口继承

在实际开发中,类经常需要实现多个接口以满足不同的行为需求。实现时,必须为接口定义的所有成员提供完整的实现逻辑。

此外,接口本身也可以继承其他接口。例如,IManager 接口继承了 IPerson 接口,这意味着实现 IManager 的类同时也隐含了 IPerson 的要求。

<summary>
/// interface实现interface
/// </summary>
interface IManager : IPerson
{
    string Dept { get; set; }
}

<summary>
/// 实现多个interface
/// 实现哪个interface必须写全实现的所有成员!
/// </summary>
public class Employee : IPerson, IAdderss
{
    public string Name { get; set; }
    public DateTime Brith { get; set; }
    
    public int Age()
    {
        return 10;
    }
    
    public uint Zip { get; set; }
    
    public string State()
    {
        return "alive";
    }
}

重写接口方法与继承

当基类实现了接口,并且其接口成员方法标记为 virtual 时,派生类可以使用 override 关键字重写该方法。这允许在保持接口契约的同时,提供特定的行为扩展。

// 重写接口实现
// 类 Employer 实现了IPerson,其中方法Age()标记为virtual,所以继承于Employer的类可以重写Age()
public class Employer : IPerson
{
    public string Name { get; set; }
    public DateTime Brith { get; set; }
    
    public virtual int Age()
    {
        return 10;
    }
}

public class Work : Employer
{
    public override int Age()
    {
        return base.Age() + 100; // base指向父类
    }
}

对象实例化与接口强制转换

虽然不能直接实例化接口,但可以通过实例化实现了接口的类来创建对象,并获取接口类型的引用。在进行接口转换时,推荐使用 as 运算符而非直接强转,以确保安全性。

第1步:创建类实例

首先创建一个具体的类实例,如 Employee,并在初始化块中设置属性值。

第2步:使用 as 进行安全转换

is 关键字用于检查类型兼容性,但不执行转换。as 关键字尝试将对象转换为指定类型,如果失败则返回 null,避免了强转可能引发的异常。建议在使用 as 后进行非空判断。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。