Interfaces (C# Programming Guide)
https://msdn.microsoft.com/en-us/library/ms173156.aspx
An interface contains definitions for a group of related functionalities that a class or a struct can implement.
By using interfaces, you can, for example, include behavior from multiple sources in a class.
That capability is important in C# because the language doesn't support multiple inheritance of classes.
In addition, you must use an interface if you want to simulate inheritance for structs, because they can't actually inherit from another struct or class.
You define an interface by using the interface keyword, as the following example shows.
interface IEquatable<T> { bool Equals(T obj); }
Any class or struct that implements the IEquatable<T> interface must contain a definition for an Equals method that matches the signature that the interface specifies.
As a result, you can count on依靠 a class that implements IEquatable<T> to contain an Equals method with which an instance of the class can determine whether it's equal to another instance of the same class.
The definition of IEquatable<T> doesn’t provide an implementation for Equals. The interface defines only the signature.
In that way, an interface in C# is similar to an abstract class in which all the methods are abstract.
However, a class or struct can implement multiple interfaces, but a class can inherit only a single class, abstract or not.
Therefore, by using interfaces, you can include behavior from multiple sources in a class.
For more information about abstract classes, see Abstract and Sealed Classes and Class Members.
Interfaces can contain methods, properties, events, indexers, or any combination of those four member types.
For links to examples, see Related Sections.
An interface can't contain constants, fields, operators, instance constructors, destructors, or types.
Interface members are automatically public, and they can't include any access modifiers.
Members also can't be static.
To implement an interface member, the corresponding member of the implementing class must be public, non-static, and have the same name and signature as the interface member.
When a class or struct implements an interface, the class or struct must provide an implementation for all of the members that the interface defines.
The interface itself provides no functionality that a class or struct can inherit in the way that it can inherit base class functionality.
However, if a base class implements an interface, any class that's derived from the base class inherits that implementation.
The following example shows an implementation of the IEquatable<T> interface.
The implementing class, Car, must provide an implementation of theEquals method.
public class Car : IEquatable<Car> { public string Make {get; set;} public string Model { get; set; } public string Year { get; set; } // Implementation of IEquatable<T> interface public bool Equals(Car car) { if (this.Make == car.Make && this.Model == car.Model && this.Year == car.Year) { return true; } else return false; } }
Properties and indexers of a class can define extra accessors for a property or indexer that's defined in an interface.
For example, an interface might declare a property that has a get accessor.
The class that implements the interface can declare the same property with both a get and set accessor.
However, if the property or indexer uses explicit implementation, the accessors must match.
For more information about explicit implementation, seeExplicit Interface Implementation (C# Programming Guide) and Interface Properties (C# Programming Guide).
Interfaces can implement other interfaces.
A class might include an interface multiple times through base classes that it inherits or through interfaces that other interfaces implement.
However, the class can provide an implementation of an interface only one time and only if the class declares the interface as part of the definition of the class (class ClassName : InterfaceName).
If the interface is inherited because you inherited a base class that implements the interface, the base class provides the implementation of the members of the interface.
However, the derived class can reimplement the interface members instead of using the inherited implementation.
A base class can also implement interface members by using virtual members.
In that case, a derived class can change the interface behavior by overriding the virtual members.
For more information about virtual members, see Polymorphism.
An interface has the following properties:
-
An interface is like an abstract base class. Any class or struct that implements the interface must implement all its members.
-
An interface can't be instantiated directly. Its members are implemented by any class or struct that implements the interface.
-
Interfaces can contain events, indexers, methods, and properties.
-
Interfaces contain no implementation of methods.
-
A class or struct can implement multiple interfaces. A class can inherit a base class and also implement one or more interfaces.
Explicit Interface Implementation (C# Programming Guide)
Explains how to create a class member that’s specific to an interface.
How to: Explicitly Implement Interface Members (C# Programming Guide)
Provides an example of how to explicitly implement members of interfaces.
How to: Explicitly Implement Members of Two Interfaces (C# Programming Guide)
Provides an example of how to explicitly implement members of interfaces with inheritance.
See Also
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了