接口必须用interface关键字声明且不可加访问修饰符成员默认public、无实现类实现接口用冒号语法需显式实现所有成员多态依赖接口变量而非具体类型接口应聚焦可替换的行为契约避免过度抽象。接口定义必须用 interface 关键字不能加访问修饰符接口本身是契约不是实现所以 C# 规定 interface 声明默认就是 public且不允许显式写 public interface 或 internal interface编译报错。常见错误是照搬类的写法加 private 或 protected——这直接过不了编译。接口里只能声明成员方法、属性、事件、索引器全部隐式为 public不许加 public 修饰符也不许带实现体C# 8.0 支持默认实现但那是特例且必须用 default 语义不是常规做法。示例interface ILogger{ void Log(string message); // ? 正确无修饰符无实现 string Name { get; set; } // ? 属性声明也一样}类实现接口必须用冒号 :且所有接口成员都要显式实现一个类实现接口语法是 class MyClass : IInterface注意是冒号不是 extends 或 implements。如果同时继承基类又实现接口基类在前接口在后class MyService : BaseService, ILogger。容易踩的坑漏掉某个接口方法或属性编译器立刻报错MyClass does not implement interface member ILogger.Log(string)把接口方法写成 private void Log(...) —— 接口成员必须是 public类中实现时也得是 public除非用显式接口实现显式接口实现如 void ILogger.Log(string m)会导致该方法无法通过类实例直接调用只能通过接口变量调用适合避免命名冲突或隐藏实现细节多态靠接口变量指向不同实现不是靠 new 出具体类型多态的核心在于“用接口类型声明变量运行时绑定具体实现”。比如ILogger logger new FileLogger();logger.Log(start); // 走 FileLogger 的实现plogger new ConsoleLogger();logger.Log(done); // 走 ConsoleLogger 的实现这里 logger 是 ILogger 类型不是 FileLogger 或 ConsoleLogger。如果写成 var logger new FileLogger()那就彻底失去多态能力后续换实现就得改代码。 Mokker AI AI产品图添加背景