服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#中接口(Interface)的深入详解

C#中接口(Interface)的深入详解

2022-10-08 15:50Tynam.Yang C#

这篇文章主要给大家介绍了关于C#中接口(Interface)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

定义

在 C# 语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的。一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承。无论是表示类之间的继承还是类实现接口、接口之间的继承,都使用“:”来表示。

接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。

定义接口语法:

interface  接口名称
{
    接口成员;
}

接口命名通常以 I 字母开头,例如Itest。

接口成员,不允许使用 public、private、protected、internal 访问修饰符,不允许使用 static、virtual、abstract、sealed 修饰符。不能定义字段,定义的方法不能包含方法体。

示例:定义一本书的接口,有id、名称name、定价price几个属性,和一个方法售卖价SalePrice()。

?
1
2
3
4
5
6
7
8
9
10
11
12
using System;
 
namespace app
{
 interface IBook
 {
 int Id { get; set; }
 string Name { get; set; }
 double Price { get; set; }
 double SalePrice(int discount);
 }
}  

实现

接口的实现与类的继承语法格式类似,也是重写了接口中的方法,让其有了具体的实现内容。

实现接口语法:

class  类名 : 接口名
{
    //类中的成员以及实现接口中的成员
}

在实现接口的成员时有两种方式,隐式实现接口成员和显式实现接口成员。隐式实现接口成员是将接口的所有成员以 public 访问修饰符修饰。显式实现接口是指在实现接口时所实现的成员名称前含有接口名称作为前缀。

下面对一本书的接口分别使用隐式实现和显式实现。

隐式实现:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Book:IBook
 {
 // 隐式的实现接口中的属性
 public int Id { get; set; }
 public string Name { get; set; }
 public double Price { get; set; }
 
 // 隐式实现接口中的方法
 public double SalePrice(int discount)
 {
  double salePrice = Price * discount * 0.1;
   return salePrice;
 }
 
 }

隐式实现后进行运行:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Program
{
 static void Main(string[] args)
 {
 Book book = new Book();
 book.Id = 1001;
 book.Name = "tynam";
 book.Price = 60;
 
 Console.WriteLine("id:{0}" , book.Id);
 Console.WriteLine("书名:{0}" , book.Name);
 Console.WriteLine("定价:{0}", book.Price);
 Console.WriteLine("售卖价:{0}", book.SalePrice(8));
 }
}

运行后结果:

id:1001
书名:tynam
定价:60
售卖价:48

显式实现:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Book:IBook
{
 public double Price { get; set; }
 // 显示的实现接口中的属性
 int IBook.Id { get; set; }
 string IBook.Name { get; set; }
 
 // 显式实现接口中的方法
 double IBook.SalePrice(int discount)
 {
 double salePrice = Price * discount * 0.1;
   return salePrice;
 }
 
}

显式实现后进行运行:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Program
{
 static void Main(string[] args)
 {
 Book book = new Book();
 IBook bookDetail = book;
 bookDetail.Id = 1001;
 bookDetail.Name = "tynam";
 bookDetail.Price = 60;
 
 Console.WriteLine("id:{0}" , bookDetail.Id);
 Console.WriteLine("书名:{0}" , bookDetail.Name);
 Console.WriteLine("定价:{0}", bookDetail.Price);
 Console.WriteLine("售卖价:{0}", bookDetail.SalePrice(8));
 }
}

运行后结果:

id:1001
书名:tynam
定价:60
售卖价:48

注意:接口无法直接进行实例化。 其成员由实现接口的任何类或结构来实现。

多态

使用接口实现多态 需要满足以下两个条件。

定义接口并使用类实现了接口中的成员。

创建接口的实例指向不同的实现类对象。

示例:定义一个接口名称为 IBird,分别定义两个实现类 Phoenix 和 Duck 来实现接口的成员,代码如下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
interface IBird
 {
 void fly();
 }
 
 class Phoenix : IBird
 {
 public void fly()
 {
  Console.WriteLine("凤凰会飞");
 }
 }
 
 class Duck : IBird
 {
 public void fly()
 {
  Console.WriteLine("鸭子也会飞");
 }
 }

实例化后执行:

?
1
2
3
4
5
6
7
8
9
10
class Program
{
 static void Main(string[] args)
 {
  IBird phoenix = new Phoenix();
  phoenix.fly();
  IBird duck = new Duck();
  duck.fly();
 }
}

执行结果:

凤凰会飞
鸭子也会飞

总结

到此这篇关于C#中接口(Interface)深入详解的文章就介绍到这了,更多相关C# 接口(Interface)详解内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/tynam/p/13580361.html

延伸 · 阅读

精彩推荐
  • C#C#简单实现发送socket字符串

    C#简单实现发送socket字符串

    这篇文章主要为大家详细介绍了C#简单实现socket字符串发送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    50%5272022-03-01
  • C#C#连接数据库的方法

    C#连接数据库的方法

    ASP.NET连接数据库的技术叫ADO.NET,它是用来向数据库提交sql语句的一堆类。这里连接的是Sql Server 2008数据库,其他数据库用法差不多,就是调用的类名不一...

    C#教程网7782021-11-01
  • C#C#通过PInvoke调用c++函数的备忘录的实例详解

    C#通过PInvoke调用c++函数的备忘录的实例详解

    这篇文章主要介绍了C#通过PInvoke调用c++函数的备忘录的实例以及相关知识点内容,有兴趣的朋友们学习下。...

    laozhang4832022-08-04
  • C#C# FileStream实现多线程断点续传

    C# FileStream实现多线程断点续传

    这篇文章主要为大家详细介绍了C# FileStream实现多线程断点续传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    airforce0948052022-02-21
  • C#C# 字符串的连接(实例讲解)

    C# 字符串的连接(实例讲解)

    下面小编就为大家分享一篇C# 字符串的连接实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    feiquan5052022-02-16
  • C#浅析C# Dynamic关键字

    浅析C# Dynamic关键字

    这篇文章主要介绍了C# Dynamic关键字的相关资料,文中讲解非常细致,对大家学习C# Dynamic关键字有所帮助,感兴趣的朋友可以了解下...

    每天进步多一点9512022-09-29
  • C#C#获取系统当前IE版本号

    C#获取系统当前IE版本号

    这篇文章主要为大家详细介绍了C#获取系统当前IE版本号,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    唐宋元明清21888122022-03-06
  • C#C#在LINQ中使用GroupBy

    C#在LINQ中使用GroupBy

    这篇文章主要介绍了C#在LINQ中如何使用GroupBy,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...

    cnxy4712022-10-07