C#接口实例详解
来源:互联网 发布:淘宝达人就是微淘吗 编辑:程序博客网 时间:2024/06/03 14:36
介绍
C#中的接口提供了一种实现运行时的多态。通过接口可以使用相同接口的引用来访问实现相同接口的不同类的方法,其实是使用虚方法通过相同的引用调用相同基础的不同的类。在开始前先使用简单的短类例子来解释接口的概念,下面的简短的例子显示接口的样子。
P1.cs
程序代码:
class Demo { public static void Main() { System.Console.WriteLine("Hello Interfaces"); } } interface abc { }输出:Hello Interfaces
编译运行上面的程序运行程序并显示出期望的结果。这段程序包含一个Demo类程序入门Main()方法中打印“Hello Interfaces”。在上面的程序中还定义了接口abc。abc接口是空的,可以在接口中添加一些元素。
P2.cs
程序代码:
class Demo { public static void Main() { System.Console.WriteLine("Hello Interfaces"); } } interface abc { int x; }输出:P2.cs(11,3): error CS0525: Interfaces cannot contain fields
错误!在C#的接口中不能包含字段例如变量。上面的程序在接口abc中声明了一个整型变量x。编译将会出错。
P3.cs
程序代码:
class Demo { public static void Main() { System.Console.WriteLine("Hello Interfaces"); } } interface abc { void xyz() { System.Console.WriteLine("In xyz"); } }输出:P3.cs(11,8): error CS0531: 'abc.xyz()': interface members cannot have a definition
P4.cs
程序代码:
class Demo { public static void Main() { System.Console.WriteLine("Hello Interfaces"); } } interface abc { void xyz(); }输出:Hello Interfaces
接口是类实现的规范。也就是说接口规定了方法的原型并有类来实现接口所定义的方法原型。
因此在类Demo和接口abc结合在一起。
P5.cs
程序代码:
class Demo : abc { public static void Main() { System.Console.WriteLine("Hello Interfaces"); } } interface abc { void xyz(); }输出:P4.cs(1,7): error CS0535: 'Demo' does not implement interface member 'abc.xyz()'P4.cs(11,8): (Location of symbol related to previous error)
P6.cs
程序代码:
class Demo : abc { public static void Main() { System.Console.WriteLine("Hello Interfaces"); } void xyz() { System.Console.WriteLine("In xyz"); } } interface abc { void xyz(); }输出:a.cs(1,7): error CS0536: 'Demo' does not implement interface member 'abc.xyz()'.'Demo.xyz()' is either static, not public, or has the wrong return type.a.cs(16,8): (Location of symbol related to previous error)a.cs(7,8): (Location of symbol related to previous error)
P7.cs
好的!上面的代码编译运行成功产生预期的输出结果。正如前面提及的接口可以调用实现相同的接口的不同的类。因此,需要不同的实现相同接口的类。在上面的代码中类Demo实现了接口abc。下面让另一个类Sample也实现接口abc。
程序代码:
class Demo : abc { public static void Main() { Demo demo = new Demo(); System.Console.WriteLine("Hello Interfaces"); demo.xyz(); } public void xyz() { System.Console.WriteLine("In xyz"); } } interface abc { void xyz(); }输出:Hello InterfacesIn xyz
P8.cs
程序代码:
class Demo : abc { public static void Main() { System.Console.WriteLine("Hello Interfaces"); Demo refDemo = new Demo(); refDemo.xyz(); Sample refSample = new Sample(); refSample.xyz(); } public void xyz() { System.Console.WriteLine("In Demo :: xyz"); } } interface abc { void xyz(); } class Sample : abc { public void xyz() { System.Console.WriteLine("In Sample :: xyz"); } }输出:In Demo :: xyzIn Sample :: xyz
现在有两个不同的类实现了相同的接口此时显示了如何从不同的类中使用相同的接口引用。
P9.cs
程序代码:
class Demo : abc { public static void Main() { System.Console.WriteLine("Hello Interfaces"); abc refabc = null; refabc = new Demo(); refabc.xyz(); refabc = new Sample(); refabc.xyz(); } public void xyz() { System.Console.WriteLine("In Demo :: xyz"); } } interface abc { void xyz(); } class Sample : abc { public void xyz() { System.Console.WriteLine("In Sample :: xyz"); } }输出:In Demo :: xyzIn Sample :: xyz
在下面的代码中使用循环调用类Demo和Sample实现相同接口abc使用单一接口引用refabc类型匹配的接口abc的类的实现。
P10.cs
程序代码:
class Demo : abc { public static void Main() { abc[] refabc = { new Demo(), new Sample() }; for(int i = 0; i <= 1; i++) refabc[i].xyz(); } public void xyz() { System.Console.WriteLine("In Demo :: xyz"); } } interface abc { void xyz(); } class Sample : abc { public void xyz() { System.Console.WriteLine("In Sample :: xyz"); } }输出:In Demo :: xyzIn Sample :: xyz
P11.cs
程序代码:
class Demo : abc, def { public static void Main() { System.Console.WriteLine("Hello Interfaces"); abc refabc = new Demo(); refabc.xyz(); } public void xyz() { System.Console.WriteLine("In xyz"); } public void pqr() { System.Console.WriteLine("In xyz"); } } interface abc { void xyz(); } interface def { void pqr(); }输出:Hello InterfacesIn xyz
P12.cs
程序代码:
class Demo : abc, def { public static void Main() { System.Console.WriteLine("Hello Interfaces"); abc refabc = new Demo(); refabc.xyz(); refabc.pqr(); } public void xyz() { System.Console.WriteLine("In xyz"); } public void pqr() { System.Console.WriteLine("In xyz"); } } interface abc { void xyz(); } interface def { void pqr(); }输出: P11.cs(9,5): error CS0117: 'abc' does not contain a definition for 'pqr'
错误!尝试通过定义为接口abc类型的变量refabc的Demo实例来访问pqr()方法,在接口abc中包含了函数xyz()的原型但没有包含pqr()方法原型。可以通过类型为接口def的Demo实例来方法pqr()方法因为接口def包含方法pqr()的原型。
0 0
- C#接口实例详解
- C#接口实例详解
- C#接口实例详解
- c#接口详解及实例说明
- C#接口实例
- C#接口-经典实例
- C# 接口 应用实例
- C#接口实例
- C#类接口实例
- C# 接口详解
- C#接口详解
- c#的接口详解
- C# 接口详解
- C#接口基础知识实例讲解
- C#接口基础知识实例讲解
- C#接口基础知识实例讲解
- C#泛型接口实例
- C#接口和编程实例
- sharepoint
- [学习笔记]AVL平衡二叉树
- 在C#中使用官方驱动操作MongoDB
- StringUtils
- 黑马程序员——Java基础---泛型、集合框架工具类
- C#接口实例详解
- iOS 第三方开源库
- [leetcode-209]Minimum Size Subarray Sum(java)
- 海量数据处理系列之:用C++实现Bitmap算法
- Kindeditor与Jquery冲突 textarea得不到数据
- hdu(3555)——Bomb(不要49)
- 网上文章常见的几种读取.properties文件的方式
- 用*号输出菱形图案
- Android基础入门教程——5.1 Fragment基本概述