接口-^^-显示接口

来源:互联网 发布:淘宝不开直通车怎么做 编辑:程序博客网 时间:2024/06/05 18:58

接口:
接口只包含:方法,属性,事件或索引器的签名,成中同实现是在实现 接口的类或结构中完成
特点:一个接口可从一个或多个基接口继承
PS:实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问;参看显示接口实现


显式接口实现
应用的两种情况:
1.如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现
  eg:Paint()
  即创建一个仅通过该接口调用并且特定于该接口的类成员
  IControl c = (IControl)obj;//根据类得到接口
  c.Paint();//接口调用方法
2.解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况
  eg:Demo()方法,Demo属性

 

代码实例:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace InterfaceSample
  6. {
  7.     /// <summary>
  8.     /// 显示实现接口示例
  9.     /// </summary>
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             SampleClass obj = new SampleClass();
  15.             //obj.Paint();  // 编译出错
  16.             IControl c = (IControl)obj;//根据类得到接口
  17.             c.Paint(); //接口调用方法
  18.             ISurface s = (ISurface)obj;
  19.             s.Paint();
  20.             obj.x = 120;
  21.             Console.Write("X属性: "+obj.x.ToString());
  22.             Console.Read();
  23.         }
  24.     }
  25.     //接口一
  26.     interface IControl
  27.     {
  28.         //声明属性
  29.         int x
  30.         {
  31.             get;
  32.             set;
  33.         }     
  34.         //声明只读属性
  35.         int Demo
  36.         {
  37.             get;
  38.         }
  39.         void Paint();   
  40.     }
  41.     //接口二
  42.     interface ISurface
  43.     {
  44.         void Paint();
  45.         void Demo();
  46.     }
  47.     
  48.     //类继承两个接口
  49.     //类成员 IControl.Paint 只能通过 IControl 接口使用,ISurface.Paint 只能通过 ISurface 使用。两个方法实现都是分离的,都不可以直接在类中使用
  50.     public class SampleClass : IControl, ISurface
  51.     {
  52.         private int _x;
  53.         public int x
  54.         {
  55.             get
  56.             {
  57.                 return _x;
  58.             }
  59.             set
  60.             {
  61.                 _x = value;
  62.             }
  63.         }
  64.         int IControl.Demo
  65.         {
  66.             get
  67.             {
  68.                 return 0;
  69.             }
  70.         }
  71.         void ISurface.Demo()
  72.         {
  73.             System.Console.WriteLine("ISurface.Demo");
  74.         }
  75.         void IControl.Paint()
  76.         {
  77.             System.Console.WriteLine("IControl.Paint");
  78.         }
  79.         void ISurface.Paint()
  80.         {
  81.             System.Console.WriteLine("ISurface.Paint");
  82.         }     
  83.     }
  84. }
原创粉丝点击