掌握 C# 接口:定义、实现与实战场景全解析
C# 接口深度解析
本指南将带你深入理解 C# 接口的核心概念,演示如何创建与实现接口,并通过真实场景展示其强大威力。
什么是 C# 接口?
在 C# 中,接口是一种契约,它定义了一组方法、属性、事件或索引器的签名,但不提供任何实现。与抽象类不同,接口的所有成员均隐式为 public 且 abstract。这一特性使接口成为定义“能力”的理想工具,让多个无继承关系的类都能共享同一组行为规范。
- 命名约定:接口名称通常以 “I” 为前缀(如
IPolygon),以便一眼识别其用途。 - 访问修饰符:接口成员不能显式声明访问修饰符,它们永远是
public。 - 无字段:接口不能声明字段(只能包含方法、属性、事件、索引器)。
interface IPolygon { void CalculateArea(); }
实现接口
类通过冒号(:)语法实现接口,必须为接口的所有成员提供具体实现。这与继承语法一致,但语义上是“实现契约”而非“继承实现”。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea(int length, int breadth);
}
class Rectangle : IPolygon {
public void CalculateArea(int length, int breadth) {
int area = length * breadth;
Console.WriteLine($"矩形面积: {area}");
}
}
class Program {
static void Main(string[] args) {
Rectangle rect = new Rectangle();
rect.CalculateArea(100, 200);
}
}
}
输出
矩形面积: 20000
实现多个接口
C# 允许一个类同时实现多个接口,从而实现类型层面的多重继承。这弥补了 C# 不支持多重类继承的限制。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea(int a, int b);
}
interface IColor {
void GetColor();
}
class Rectangle : IPolygon, IColor {
public void CalculateArea(int a, int b) {
int area = a * b;
Console.WriteLine($"矩形面积: {area}");
}
public void GetColor() {
Console.WriteLine("红色矩形");
}
}
class Program {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.CalculateArea(100, 200);
r.GetColor();
}
}
}
输出
矩形面积: 20000 红色矩形
使用接口引用实现多态
虽然不能直接实例化接口,但可以声明接口类型的变量,并将其指向任意实现该接口的类实例。这是实现多态的核心机制之一。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea(int length, int breadth);
}
class Rectangle : IPolygon {
public void CalculateArea(int length, int breadth) {
int area = length * breadth;
Console.WriteLine($"矩形面积: {area}");
}
}
class Program {
static void Main(string[] args) {
IPolygon poly = new Rectangle(); // 接口引用指向实现类实例
poly.CalculateArea(100, 200);
}
}
}
输出
矩形面积: 20000
实战案例:多态形状面积计算
下例定义了 IPolygon 接口,并由 Rectangle 与 Square 两个具体形状类实现。每个形状独立计算面积,展示了接口如何统一不同类型的行为。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea();
}
class Rectangle : IPolygon {
public void CalculateArea() {
int length = 30, breadth = 90;
int area = length * breadth;
Console.WriteLine($"矩形面积: {area}");
}
}
class Square : IPolygon {
public void CalculateArea() {
int side = 30;
int area = side * side;
Console.WriteLine($"正方形面积: {area}");
}
}
class Program {
static void Main(string[] args) {
Rectangle rect = new Rectangle();
rect.CalculateArea();
Square sq = new Square();
sq.CalculateArea();
}
}
}
输出
矩形面积: 2700 正方形面积: 900
为什么要使用 C# 接口?
- 抽象:仅定义“做什么”,不限制“怎么做”,让开发者专注于业务契约而非实现细节。
- 规范:凡实现该接口的类,必然提供接口声明的所有成员,保证代码库的一致性。
- 多重继承替代方案:C# 不支持多重类继承,接口填补了这一空白,允许类组合多种能力。
- 松耦合:依赖接口而非具体类,使代码更灵活、易测试、易维护,是依赖倒置原则的基石。
C语言
- 长车道无线监测方案:树莓派集成低成本驱动道传感器
- SPICE 命令行界面使用详解
- C# 接口完全指南:定义契约、实现多态与解耦设计
- 精通 Java 接口:概念、实现与最佳实践
- Java 集合框架:核心接口、实现类与实战用法
- Java Collection 接口:核心概念与常用方法
- 精通 Java Queue 接口:方法、实现类与实战应用
- 精通 Java Deque 接口:特性、方法与实战示例
- 掌握 Java NavigableSet 接口:导航、排序与实战示例
- 掌握 Java Lambda 表达式:从基础到 Stream API 实战
- Java 接口全解析:定义契约、默认方法、多实现与标记接口
- Java 9 接口私有方法:增强封装与代码复用