C#中的接口

接口

接口是指一组函数成员而不实现它们的引用类型。只有类是结构体实现接口。例如:

namespace CSharpProject1;

interface IInfo
{
    string GetName();
    int GetAge();
}

class CA : IInfo
{
    public string Name;
    public int Age;


    public string GetName()
    {
        return Name;
    }

    public int GetAge()
    {
        return Age;
    }
}

class CB : IInfo
{
    public string Name;
    public int Age;
    public int Sex;
    public string GetName()
    {
        return Name;
    }

    public int GetAge()
    {
        return Age;
    }
}

class Program
{
    static void Main(string[] args)
    {
        CA ca = new CA() {Name = "lily", Age = -1};
        CB cb = new CB() {Name = "lilys", Age = -2, Sex = 1};
    }
}

声明接口

在接口声明中不能包含以下成员:

  • 数据成员
  • 静态成员

在接口中,函数成员的声明不能包含任何实现代码,必须使用分号代替每一个成员声明的主体。

按照惯例,接口名称必须从大写的I开始(比如IService)。与类和接口一样,接口声明也可以分割成分部接口声明;

接口默认访问修饰符为public

实现接口

关于实现接口,这里有一些重要的事情:

  • 如果类实现了接口,它必须实现接口的所有成员。
  • 如果类派生基类并实现了接口,基类列表中的基类名称必须放在所有接口之前(基类放在接口前面),例如:
class SubClass:BaseClass1, Interface1,Interface2...
{
    ...
}

接口是引用类型

例如:

namespace CSharpProject1;

interface ISpeak
{
    void Say();
}

class Cat: ISpeak
{
    public void Say()
    {
        Console.WriteLine("cat speak...");
    }
}

class Program
{
    static void Main(string[] args)
    {
        ISpeak cat = new Cat();
        cat.Say();
    }
}
D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
cat speak...

Process finished with exit code 0.

实现具有重复成员的接口

如果一个类实现了多个接口,并且其中一些接口成员具有相同的方法和返回类型,那么类可以以接口名.方法实现成员来满足包含重复成员的接口,例如:

interface IF1
{
    void Say();
}

interface IF2
{
    void Say();
}

class Cat: IF1, IF2
{
    void IF1.Say()
    {
        
    }

    void IF2.Say()
    {
        
    }
}

接口可以继承接口,也可以继承多个接口

例如:

namespace CSharpProject1;

interface IDataRetrieve
{
    int GetData();
}

interface IDataStore
{
    void SetData(int x);
}

interface IDataIO:IDataRetrieve, IDataStore
{
    
}

class MyData : IDataIO
{
    private int data;
    public int GetData()
    {
        return data;
    }

    public void SetData(int x)
    {
        data = x;
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyData md = new MyData();
        md.SetData(10);
        Console.WriteLine($"{md.GetData()}");
    }
}
D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
10

Process finished with exit code 0.
posted @ 2024-01-15 14:38  LilyFlower  阅读(8)  评论(0编辑  收藏  举报