【C#】【语法】接口

在C#中,接口(Interface)是一个抽象类型,用于指定一组方法和属性,而不提供它们的具体实现。接口定义了一种契约,任何实现这个接口的类都必须遵循这个契约。

接口的定义

在C#中,接口使用interface关键字定义。例如:

public interface IFlyable
{
    void Fly();
    int MaxAltitude { get; set; }
}

这个接口定义了一个Fly方法和一个MaxAltitude属性。它只定义了方法和属性的名称和签名(即参数和返回类型),但没有提供任何具体的实现。

实现接口的类

实现接口的类必须提供接口中所有方法和属性的具体实现。例如:

public class Bird : IFlyable
{
    public int MaxAltitude { get; set; }

    public void Fly()
    {
        Console.WriteLine("Bird is flying.");
    }
}

在这个例子中,Bird类实现了IFlyable接口。这意味着Bird类必须提供Fly方法和MaxAltitude属性的具体实现。

为什么使用接口?

  1. 规范约束:接口规定了一个类必须提供的方法和属性,从而确保了一致性和规范性。
  2. 解耦:接口使代码更加模块化,可以方便地替换实现而不影响依赖于接口的代码。
  3. 多态性:接口允许在不考虑对象具体类型的情况下使用对象,只要对象实现了接口。例如,可以通过接口数组来存储不同类型的对象,但这些对象都实现了同一个接口。

示例

假设我们有多个类型的飞行物体,比如鸟、飞机和直升机,我们可以定义一个IFlyable接口来规范它们的行为:

public interface IFlyable
{
    void Fly();
    int MaxAltitude { get; set; }
}

然后,我们可以分别实现这个接口:

public class Bird : IFlyable
{
    public int MaxAltitude { get; set; }

    public void Fly()
    {
        Console.WriteLine("Bird is flying.");
    }
}

public class Airplane : IFlyable
{
    public int MaxAltitude { get; set; }

    public void Fly()
    {
        Console.WriteLine("Airplane is flying.");
    }
}

public class Helicopter : IFlyable
{
    public int MaxAltitude { get; set; }

    public void Fly()
    {
        Console.WriteLine("Helicopter is flying.");
    }
}

使用接口的好处在于,我们可以编写通用代码来处理所有实现了IFlyable接口的对象,而无需关心它们的具体类型:

public class FlyTest
{
    public static void Main()
    {
        List<IFlyable> flyingObjects = new List<IFlyable>
        {
            new Bird { MaxAltitude = 1000 },
            new Airplane { MaxAltitude = 30000 },
            new Helicopter { MaxAltitude = 15000 }
        };

        foreach (var obj in flyingObjects)
        {
            obj.Fly();
            Console.WriteLine($"Max Altitude: {obj.MaxAltitude}");
        }
    }
}

在这个示例中,我们创建了一个包含不同类型飞行物体的列表,并通过遍历列表来调用它们的Fly方法和获取它们的MaxAltitude属性。这展示了接口如何提供多态性和解耦的能力。


 
posted @ 2024-06-27 18:08  ban_boi  阅读(8)  评论(0编辑  收藏  举报