C#接口是一种特殊的类型,它可以被其他类实现。接口定义了一个类必须实现的方法,属性和事件。接口不能包含字段或静态成员,但可以包含属性、方法、事件和索引。
C#接口的主要作用是定义一个标准,让其他类遵循这个标准来实现特定的功能。例如,如果你想要创建一个数据库应用程序,你可以使用C#接口来定义数据库访问的标准方法,然后让其他类去实现这些方法。这样就能够保证所有的数据库访问都遵循相同的标准,而不会因为不同的开发人员而导致不一致。
C# 接口还有助于代码重用。例如,如果你想要创建一个文本处理工具,你可以使用 C# 接口来定义文本处理所需要的方法(例如读写文本文件、分割字符串、格式化文本内容等)。然后你就可以在其他项目中重用这些代码而无需重复开发。
此外,C# 接口还有助于隔离代码依赖性。例如,如果你想要创建一个日志工具(将日志信息写入文本文件或数据库中),你就可以使用 C# 接口来隔离日志工具代码和文本文件操作代码或数据库代理代 码之间的依赖性。这样就能够保证既能正常使用既能正常卸载既能正常卸载既能正常卸载既能正常卸载既能正常卸载既能正常卸载既能正常卸 载既能正常卸轄
public interface ILogger { void Log(string message); } public class FileLogger : ILogger { public void Log(string message) { // Write log to file. } }
接口提供了一个规范而不是其成员的实现。
接口作为定义和实现之间的联系。
接口成员都是隐式抽象的。
类或结构可以实现多个接口。
接口声明就像一个类声明,但它不为其成员提供实现。
这些成员将由实现接口的类和结构实现。
接口只能包含方法,属性,事件和索引器。
下面是在System.Collections中定义的IEnumerator接口的定义:
public interface IEnumerator { bool MoveNext(); object Current { get; } void Reset(); }
接口成员总是隐式公开的,不能声明访问修饰符。
实现接口意味着为其所有成员提供公共实现:
class Countdown : IEnumerator { int count = 11; public bool MoveNext () { return count-- > 0 ; } public object Current { get { return count; } } public void Reset() { throw new NotSupportedException(); } }
您可以将对象隐式转换为它实现的任何接口。例如:
IEnumerator e = new Countdown(); while (e.MoveNext()) Console.Write (e.Current);
接口可以从其他接口派生。
例如:
public interface IUndoable { void Undo(); } public interface IRedoable : IUndoable { void Redo(); }
IRedoable
“继承" IUndoable
的所有成员。
实现多个接口有时可能导致成员方法之间的冲突。
我们可以通过显式实现一个接口成员来解决这种冲突。
考虑下面的例子:
interface Interface1 { void iMethod(); } interface Interface2 { int iMethod(); } public class Widget : Interface1, Interface2 { public void iMethod () { Console.WriteLine ("Widget"s implementation of Interface1.iMethod"); } int Interface2.iMethod(){ Console.WriteLine ("Widget"s implementation of Interface2.iMethod"); return 42; } }
这使得两种方法在一个类中共存。调用显式实现的成员的唯一方法是转换到其接口:
Widget w = new Widget(); w.iMethod(); // Widget"s implementation of Interface1.iMethod ((Interface1)w).iMethod(); // Widget"s implementation of Interface1.iMethod ((Interface2)w).iMethod(); // Widget"s implementation of Interface2.iMethod
隐式实现的接口成员默认是封装的。
它必须在基类中标记为virtualor或abstract以便被覆盖。
例如:
public interface IUndoable { void Undo(); } public class DrawPad : IUndoable { public virtual void Undo() { Console.WriteLine ("DrawPad.Undo"); } } public class RichDrawPad : DrawPad { public override void Undo() { Console.WriteLine ("RichDrawPad.Undo"); } }
C#布尔类型/运算符C#的bool类型别名System.Boolean类型是一个逻辑值,可以分配文本true或false。我们使用bool类型来表示一个tu...
C# 迭代器 foreach 语句是枚举器的消费者。迭代器是枚举器的生成器。在这个例子中,我们使用迭代器返回一系列斐波纳契数:using ...
C# 二进制文件的读写 C# 文件的输入与输出BinaryReader 和 BinaryWriter 类用于二进制文件的读写。BinaryReader 类BinaryReader ...