代码编织梦想

(一)接口

使用接口可以在类中包括来自多个源的行为。因为该语言不支持类的多重继承。 此外,如果要模拟结构的继承,也必须使用接口,因为它们无法实际从另一个结构或类继承。

我们创建一个接口,定义两个抽象类,接口不能声明实例数据,如字段、自动实现的属性或类似属性的事件,且接口的命名要以大写I开头。

interface IStuden
{
    void Add();
    void Bdd();
}

我们再创建两个类继承自接口,用于实现接口中的抽象方法。 

class NewStuden : IStuden
{
    public void Add()
    {
        Console.WriteLine(123);
    }

    public void Bdd()
    {
        Console.WriteLine(123);
    }
}
class WithStuden : IStuden
{
    public void Add()
    {
        Console.WriteLine(456);
    }
    public void Bdd()
    {
        Console.WriteLine(456);
    }
}

为了使耦合降低,我们再创建一个Quint类,里面构造一个构造器,接收一个IStuden接口类型的值,把他赋值给私有类_istuden,创建一个方法调用具体传入的那个类的方法。

class Quint
{
    private IStuden _istuden;
    public Quint(IStuden i)
    {
        _istuden = i;
    }
    public void Cdd()
    {
        _istuden.Add();
        _istuden.Bdd();
    }
}

运用的时候,我们对 Quint类创建实例化对象,传入你要使用的类,我这里将NewStuden类传入,只用修改我们传入的对象就可以,同时也避免了对代码的修改,遵循了开闭原则。

Quint q = new Quint(new NewStuden());
q.Cdd();

我们运行整体代码 查看结果,打印出来两个123,说明我们调用成功了NewStuden类中的两个方法。

8c1a366c3d8a44bfb30a7cda575f8b31.png

(二)类继承多重接口

我们都知道类继承类的话使单一的,但是类继承接口的话使可以继承许多的,一个接口可从一个或多个基接口继承。当接口重写基接口中的方法实现时,必须使用显式接口实现语法。

我们构建两个接口IStudent和ITeach,里面分别创建了一个Add和Bdd的抽象方法。

interface IStudent
{
    void Add();
}
interface ITeach
{
    void Bdd();
}

 我们再创建一个NewClass类来继承这两个接口,并且实现这两个接口中的抽象方法。

class NewClass : IStudent, ITeach
{
    public void Add()
    {
        Console.WriteLine(123);
    }

    public void Bdd()
    {
        Console.WriteLine(456);
    }
}

 我们对类创建实例化对象,并且运用这两个方法。

new NewClass().Add();
new NewClass().Bdd();

运行代码,我们可以看到将这两个方法都打印了出来,这就是类可以继承多重接口。

7d8c69218632453c9dc6157c152473a9.png

(三)接口的显式实现

接口的显式实现式c#语言所特有的,当我们使用类来继承多重接口,再创建实例化对象对方法的引用时,我们不想让其中一个抽象方法显示出来就需要使用到接口的显式实现,显式实现还用于处理两个接口分别声明名称相同的不同成员。

同样我们构建两个接口IStudent和ITeach,里面分别创建了一个Add和Bdd的抽象方法。

interface IStudent
{
    void Add();
}
interface ITeach
{
    void Bdd();
}

现在我们创建一个NewClass类来继承这两个接口,将其中的Add抽象方法构建为显式实现,Bdd抽象方法进行普通实现。

class NewClass : IStudent, ITeach
{
    public void Bdd()
    {
        Console.WriteLine(123);
    }

    void IStudent.Add()
    {
        Console.WriteLine(456);
    }
}

现在我们对NewClass类创建实例化对象,并且引出我们需要实现的方法,我们可以看到,我们只能对Bdd方法进行引用,Add方法不见了。

87ba5030abe04750bc4021baeddf2535.png

 当我们要使用Add方法的时候,需要这样做,用student可以看到Add方法但是看不到Bdd方法。

NewClass n = new NewClass();
IStudent student = n;
student.Add();

 或者我们可以使用我们要显示的那个接口来对类创建实例化对象,但是这样同样只能看到Add方法看不到Bdd方法。

IStudent student = new NewClass();
student.Add();

你可能不希望为这两个接口都调用相同的实现。 若要调用不同的实现,根据所使用的接口,可以显式实现接口成员。 显式接口实现是一个类成员,只通过指定接口进行调用。 通过在类成员前面加上接口名称和句点可命名该类成员。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_58159494/article/details/132922453

c#显式实现接口和隐式实现接口的区别及优缺点_忧伤的熊二的博客-爱代码爱编程

继承Interface接口之后,VS会显示两个实现接口的方式:实现接口、显式实现接口。 先看代码,接口类如下: interface IFileOperator { bool WriteFile(string filePath); bool ReadFile(string filePatth,out IReadFileModel

C# 类方法的继承(new、override用法)(抽象类、接口)-爱代码爱编程

一、C#类方法的继承 子类有两种方式来重载父类中的方法 ①virtual+override ②new using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace

C# 接口的实现与继承-爱代码爱编程

        接口通过类继承来实现,一个类虽然只能继承一个基类,但可以继承任意接口。声明实现接口的类时,需要在基类列表中包含类所实现的接口的名称。 例1         创建一个控制台应用程序,该程序在例1 的基础上实现,Program 类继承自接口 ImyInterface,并实现了该接口中的所有属性和方法。然后在 Main 方法中实例化

leetcode 面试题 04.01. 节点间通路-爱代码爱编程

文章目录 一、题目二、C# 题解 一、题目   节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。   点击此处跳转题目。 示例1: 输入: n = 3, grap

c#获取屏幕的分辨率、工作区分辨率-爱代码爱编程

运行结果如下; 由于屏幕的任务栏在侧面所以屏幕宽度变化。 代码如下 private void Form1_Load(object sender, EventArgs e) { int SH = Screen.PrimaryScreen.Bounds.Height; //1080

-爱代码爱编程

  foreach (var mo in new ManagementObjectSearcher(null, "SELECT * FROM Win32_PnPEntity").Get().OfType<ManagementObject>()) { // ask for 2 prope

-爱代码爱编程

回调函数(Callback Function)是一种函数指针,它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数,在这个函数工作完成后,它将通过这个回调函数的指针来回调通知调用者处理结果。     此定义来自网上; 看一个例子;这是用委托实现的回调函数; using System; using System.Col

【学习笔记】c#基础 - 由c/c++衍生出来的面向对象的编程语言-爱代码爱编程

一、程序结构 1、基本语法 using System; // C#程序第一条语句都是 using System; // using 关键字(可多个):在程序中包含命名空间 namespace RectangleApp

c#网站代码防止漏洞和攻击 增强网站安全性方法-爱代码爱编程

输入验证: 永远不要信任用户提供的输入数据。始终对用户提交的数据进行验证和过滤,以防止恶意输入。使用正则表达式、白名单过滤或内置的.NET验证来验证输入。 防止SQL注入: 使用参数化查询或存储过程来执行数据库查询,而不是将用户输入直接嵌入SQL语句中。这可以有效防止SQL注入攻击。 防止跨站脚本(XSS)攻击: 始终对用户提交的数据进行HTML编码