c#编程
完成条件
接口(Interface)
在 C# 中,接口(Interface) 是一种类型定义,类似于类,但它仅表示对象与其使用者之间的契约。接口不能直接实例化为对象,也不能定义数据成员。因此,接口只是一组方法和属性声明。以下是一个简单的接口定义示例:
interface IShape
{
double X { get; set; }
double Y { get; set; }
void Draw();
}
命名约定
在 .NET 框架中(以及许多 C# 程序员使用的命名习惯),通常在接口名称的开头加上 "I" 来区分接口和类名。例如,IShape
表示一个接口,而 Shape
则可能是一个类。
另一种常见的命名约定是,当接口声明了一个关键方法时(例如上述示例中的 Draw()
方法),接口名称可以通过添加“...able”后缀形成形容词。例如,上述接口可以命名为 IDrawable
。这种命名约定在 .NET 框架中被广泛使用。
实现接口
实现接口的方法非常简单:通过继承接口并实现接口声明的所有方法和属性。以下是一个实现 IShape
接口的类的示例:
class Square : IShape
{
private double _mX, _mY;
public void Draw() { ... }
public double X
{
set { _mX = value; }
get { return _mX; }
}
public double Y
{
set { _mY = value; }
get { return _mY; }
}
}
虽然一个类只能继承一个类,但它可以继承多个接口。这是 C# 支持的多重继承的简化形式。当从一个类和一个或多个接口继承时,继承列表中的顺序应首先列出基类,然后是要实现的接口。例如:
class MyClass : Class1, Interface1, Interface2 { ... }
使用接口类型声明对象引用
可以使用接口类型来声明对象引用。例如,使用上述示例:
class MyClass
{
static void Main()
{
IShape shape = new Square();
shape.Draw();
}
}
接口继承
接口可以从其他接口继承,但不能从类继承。例如:
interface IRotateable
{
void Rotate(double theta);
}
interface IDrawable : IRotateable
{
void Draw();
}
其他细节
- 访问修饰符:接口成员无法使用访问修饰符(例如
private
、internal
等),因为接口的所有成员默认是公共的。 - 实现接口的类:实现接口的类必须定义接口声明的所有成员。实现类可以选择将某些实现方法标记为
virtual
,如果希望在子类中重写该方法。 - 静态方法:接口中不能有静态方法,但任何静态方法可以在实现接口的类中实现。
- 事件和索引器:除了方法和属性外,接口还可以声明事件和索引器。
Java 和 C# 的接口对比
对于熟悉 Java 的人,C# 的接口与 Java 的接口非常相似。
最后修改: 2025年01月11日 星期六 23:30