【C#基础知识 18】9. 接口

9. 接口 (Interface)

接口 是一种完全抽象的类,它定义了一组方法、属性、事件和索引器,但不提供这些成员的具体实现。接口用于定义对象应该具备的行为,而不关心具体实现细节。接口可以被类和结构体实现。

9.1 定义接口
基本概念
  • 声明接口:使用 interface 关键字声明接口。
  • 接口成员:接口可以包含方法、属性、索引器和事件,但这些成员默认是抽象的,没有实现。
  • 实现接口:类或结构体可以实现一个或多个接口,必须提供接口中所有成员的具体实现。
代码示例

csharp

using System;

// 定义一个接口
public interface IAnimal
{
    // 接口中可以包含方法声明
    void Speak();

    // 接口中可以包含属性声明
    string Name { get; set; }
}

// 实现接口的类
public class Dog : IAnimal
{
    // 实现接口中的属性
    public string Name { get; set; }

    // 实现接口中的方法
    public void Speak()
    {
        Console.WriteLine("Woof!");
    }
}

// 另一个实现接口的类
public class Cat : IAnimal
{
    // 实现接口中的属性
    public string Name { get; set; }

    // 实现接口中的方法
    public void Speak()
    {
        Console.WriteLine("Meow!");
    }
}

public class Program
{
    public static void Main()
    {
        IAnimal dog = new Dog { Name = "Buddy" };
        IAnimal cat = new Cat { Name = "Whiskers" };

        dog.Speak(); // 输出: Woof!
        cat.Speak(); // 输出: Meow!

        Console.WriteLine(dog.Name); // 输出: Buddy
        Console.WriteLine(cat.Name); // 输出: Whiskers
    }
}
9.2 接口的特性
1. 多接口实现

一个类可以实现多个接口。


csharp

using System;

// 定义两个接口
public interface IAnimal
{
    void Speak();
    string Name { get; set; }
}

public interface IMovable
{
    void Move();
}

// 实现多个接口的类
public class Dog : IAnimal, IMovable
{
    public string Name { get; set; }

    public void Speak()
    {
        Console.WriteLine("Woof!");
    }

    public void Move()
    {
        Console.WriteLine("Running");
    }
}

public class Program
{
    public static void Main()
    {
        Dog dog = new Dog { Name = "Buddy" };
        dog.Speak(); // 输出: Woof!
        dog.Move();  // 输出: Running
    }
}
2. 接口继承

接口可以继承自一个或多个接口。


csharp

using System;

// 定义一个接口
public interface IAnimal
{
    void Speak();
    string Name { get; set; }
}

// 定义一个继承自 IAnimal 的接口
public interface IDog : IAnimal
{
    void Fetch();
}

// 实现继承接口的类
public class Dog : IDog
{
    public string Name { get; set; }

    public void Speak()
    {
        Console.WriteLine("Woof!");
    }

    public void Fetch()
    {
        Console.WriteLine("Fetching the ball!");
    }
}

public class Program
{
    public static void Main()
    {
        Dog dog = new Dog { Name = "Buddy" };
        dog.Speak();  // 输出: Woof!
        dog.Fetch();  // 输出: Fetching the ball!
    }
}
3. 默认接口方法

从 C# 8.0 开始,接口可以包含默认方法实现。


csharp

using System;

// 定义一个接口
public interface IAnimal
{
    void Speak();
    string Name { get; set; }

    // 默认方法实现
    void Sleep()
    {
        Console.WriteLine("Sleeping...");
    }
}

// 实现接口的类
public class Dog : IAnimal
{
    public string Name { get; set; }

    public void Speak()
    {
        Console.WriteLine("Woof!");
    }
}

public class Program
{
    public static void Main()
    {
        IAnimal dog = new Dog { Name = "Buddy" };
        dog.Speak();  // 输出: Woof!
        dog.Sleep();  // 输出: Sleeping...
    }
}
9.3 使用接口的好处
  • 抽象:接口定义了对象应该具备的行为,而不关心具体实现细节。
  • 多态:通过接口可以实现多态,提高代码的灵活性和可扩展性。
  • 解耦:接口使得类之间的依赖关系更加松散,便于维护和测试。

总结

  • 接口 是一种完全抽象的类,用于定义对象应该具备的行为。
  • 类和结构体可以实现一个或多个接口,并提供接口成员的具体实现。
  • 接口支持多接口实现和接口继承,可以包含默认方法实现。
  • 使用接口可以提高代码的抽象性、灵活性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路飞VS草帽

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值