首页 > 编程语言 >C#中的接口

C#中的接口

时间:2024-01-15 14:45:08浏览次数:29  
标签:C# void 接口 class int public CSharpProject1

接口

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

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.

标签:C#,void,接口,class,int,public,CSharpProject1
From: https://www.cnblogs.com/lilyflower/p/17965328

相关文章

  • docker mysql8使用SSL及使用openssl生成自定义证书
    修改my.cnfvi/docker_data/mysql/conf/my.cnf[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]character-set-server=utf8mb4default_authentication_plugin=mysql_native_password#增加sslssl保存,重启mysql容器dockerrestartmysql-8.0.23......
  • Arduino部分C语言含义之--“::”
    "::“在C++中表示作用域,和所属关系。”::"是运算符中等级最高的。有三种作用。1.作用域符号例如:A,B表示两个类,在A,B中都有成员member。那么:A::member就表示类A中的成员member。B::member就表示类B中的成员member。2.全局作用域符号charzhou;//全局变量voids......
  • Arch Linux 更换国内镜像源
    自己用的ArchLinux在使用pacman-Syu更新系统时出现了连接超时的问题,看来又需要换个镜像源了。趁着今天还没想好要分享的内容,那就干脆以此为主题,总结一下如何给ArchLinux系统更换国内镜像源。手动更换这里说的「手动」是相对于后面要介绍的命令方式而言,是比较基础的镜像......
  • 如何定位和优化程序CPU、内存等性能之巅
    摘要性能优化指在不影响系统运行正确性的前提下,使之运行得更快,完成特定功能所需的时间更短,或拥有更强大的服务能力。本文将介绍性能优化的基本概念以及如何定位和优化程序中的CPU、内存和IO瓶颈。引言随着计算机系统的日益复杂和应用场景的多样化,性能优化对于提升系统效率和用......
  • 【scikit-learn基础】--『监督学习』之 层次聚类
    层次聚类算法是机器学习中常用的一种无监督学习算法,它用于将数据分为多个类别或层次。该方法在计算机科学、生物学、社会学等多个领域都有广泛应用。层次聚类算法的历史可以追溯到上世纪60年代,当时它主要被用于社会科学中。随着计算机技术的发展,这种方法在90年代得到了更为广泛的......
  • WSL2 配置 ArchLinux 初始化环境
    这篇文章针对的是在Win11系统的WSL2下安装ArchLinux系统,网上很多中文教程都是使用LxRunOffline去做的,但是实际上该方法已经过时了,目前有更加先进的ArchWSL方式。基于LxRunOffline安装ArchLinux教程:Here如果用的是wsl1,不保证本教程可以适用。安装ArchLinux子系统......
  • ai文章创作助手,大模型原创助手,已对接rpcms
    AI的红利吃到了吗?天天看视频说AI这个好,那个好,使用了吗?想用chatGPT,需要有梯子,国内目前就文心一言一家,倒是能用。但如果想对接到自己系统上,需要开通API(不管chatGPT还是一言都是),关键还不是免费的(官方网页版免费使用)。这里偷偷告诉你,我有API,还不贵(别老想着免费,开发不需要成本哈)。......
  • npm 安装cnpm 设置淘宝镜像报错 4048
    npmERR!codeEPERMnpmERR!syscallrenamenpmERR!pathD:\programfiles\nodejs\node_global\node_modules\cnpm\node_modules\npm\node_modules.node-gyp.DELETE\node_modules@npmclinpmERR!destD:\programfiles\nodejs\node_global\node_modules\cnp......
  • vite构建的react+ts项目中使用arcodesign组件的问题
    今天在react项目中使用arcodesign组件库,引入的图标巨大无比,调样式也不起作用,如下图。网上找了也没看到类似的问题,去官网文档里看,发现是没有引入组件的样式。在我这个vite构建的react+ts项目中找到两个解决办法:第一个是直接引入全部样式import"@arco-design/web-react/dist/cs......
  • ABAP:接口文档下载
    *&---------------------------------------------------------------------**&ReportZTEST_RFC*&---------------------------------------------------------------------**&*&----------------------------------------------------------------......