C# 接口interface的学习

2024-06-21 02:58

本文主要是介绍C# 接口interface的学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近看了看C#语法中的接口。记录下学习的内容。

首先是普通的类继承普通的接口。

using UnityEngine;
using System.Collections;
using System;
using Interface1;
namespace Interface1
{
//接口可由方法、属性、事件、索引器这4种成员类型任意组合构成,但不能包含字段。
//接口成员不能有定义(代码体)
//不能直接实例化接口
//类或结构体可继承多个接口
//接口本身可以继承多个接口
//继承接口的任何非抽象类型都必须实现接口的所有成员
interface MyInterface
{
string ID //默认访问权限是public,但是不能加修饰符
{
set;
get;
}
string name
{
set;
get;
}
//接口中的方法(函数)不能有定义(实体)
void SetID();
}
interface MyInterface2
{
void Add();
}
//类继承接口后,需要实现接口中的所有成员
class MyClass : MyInterface
{
string id_ = "";
string name_ = "";
//实现接口成员必须有public修饰
public string ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}
public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}
public void SetID()
{
Debug.Log("MyInterface.SetID");
}
}
}
//类继承多个接口,需要实现所有接口的成员
class MyClass2 : MyInterface, MyInterface2
{
string id_ = "";
string name_ = "";
public string ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}
public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}
public void Add()
{
}
public void SetID()
{
}
}
public class Interface_Test : MonoBehaviour
{
// Use this for initialization
void Start()
{
Interface1.MyClass mc = new Interface1.MyClass();
mc.SetID();
}
// Update is called once per frame
void Update()
{
}
}

类显示实现接口成员。
using UnityEngine;
using System.Collections;
using System;
using Interface2;
//显示实现接口成员
//当一个类继承两个接口时,这两个接口中的方法名是完全相同的标识符,而其功能是不相同的。
//为了区分不同接口中相同的标识符的方法,这时就可以显示地实现接口成员,即创建一个仅通过该接口调用并且特定于该接口的类成员。
namespace Interface2
{
interface MyInterface
{
string ID
{
set;
get;
}
string name
{
set;
get;
}
void SetID();
}
public interface MyInterface2
{
string ID
{
set;
get;
}
string name
{
set;
get;
}
void SetID();
}
//继承的两个接口中的成员标识符完全一样
//显示接口成员实现中不能包含访问修饰符、abstract、override、static、const
//显示接口成员属于接口成员,而不是类的成员,不能使用类对象访问,只能通过接口对象访问
class MyClass : MyInterface, MyInterface2
{
string id_ = "";
string name_ = "";
//显示地实现MyInterface2中的ID属性
string MyInterface2.ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}
//显示地实现MyInterface中的ID属性
string MyInterface.ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}
public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}
//显示地实现MyInterface中的SetID方法
void MyInterface.SetID()
{
Debug.Log("MyInterface.SetID");
}
//显示地实现MyInterface2中的SetID方法
void MyInterface2.SetID()
{
Debug.Log("MyInterface2.SetID");
}
}
}
public class Interface_Test1 : MonoBehaviour 
{
// Use this for initialization
void Start () 
{
Interface2.MyClass mc = new Interface2.MyClass();
MyInterface mi = mc; //接口不能直接实例化,这里使用类的对象实例化接口
mi.SetID(); //显示实现接口的成员只能通过接口对象访问
MyInterface2 mc2 = mc;
mc2.SetID(); 
}
// Update is called once per frame
void Update () 
{
}
}

基类实现接口成员。
using UnityEngine;
using System.Collections;
using System;
using Interface3;
//基类实现接口成员
namespace Interface3
{
interface MyInterface
{
string ID
{
set;
get;
}
string name
{
set;
get;
}
void SetID();
void SetName();
}
class MyClass
{
public virtual void SetName()
{
Debug.Log("MyClass.SetName");
}
}
//继承的基类中实现了继承的接口中的成员,意味着派生类隐式地支持这个接口
class MyClass2 : MyClass, MyInterface
{
string id_ = "";
string name_ = "";
string MyInterface.ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}
public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}
public void SetID()
{
Debug.Log("MyClass2.SetID");
}
}
}
public class Interface_Test2 : MonoBehaviour 
{
// Use this for initialization
void Start () 
{
Interface3.MyClass2 m = new Interface3.MyClass2();
m.SetID();
m.SetName();
}
// Update is called once per frame
void Update () 
{
}
}

这篇关于C# 接口interface的学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080020

相关文章

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL