C#接口简介

C#接口Interface的运用实例,

官方定义: 接口仅包含方法,属性,事件,索引器的签名。

在一个类或者结构体在实现一个接口时必须实现这个接口定义声明的所有成员
一个接口可以继承一个或者多个基接口(Base Interface)
在一个包含基类以及接口的列表中,基类必须放在前面
当一个类实现接口时可以显式的实现接口的成员,一个显式实现的接口成员是不能通过类的实例访问的,只能通过接口的实例访问

namespace CSharpStudy
{
    interface IAddInterface
    {
        string IAdd(string a, string b);
        int IAdd(int a, int b);
    }
class Add
 {
 public string Addstr(string a, string b)
 {
 return a + b;
 }
 }
  //class Program : IAddInterface, Add 编译错误 在一个包含基类以及接口的列表中,基类必须放在前面
  class Program:Add,IAddInterface
    {
        static void Main(string[] args)
        {
            Program P = new Program();
            IAddInterface IP = new Program();
            Console.WriteLine(P.IAdd("Hello", " World")) ;
            Console.WriteLine(IP.IAdd(1, 2));
            Console.WriteLine(IP.IAdd("Hello", " World"));// 接口的实例可以访问显式和隐式实现的接口成员
            //P.IAdd(1, 2);  编译错误, 一个显式实现的接口成员是不能通过类的实例访问的,只能通过接口的实例访问。
        }
        public string IAdd(string a, string b) //如果要隐式的实现接口,那么必须要是 public的。
        {
            return a + b;
        }
         int IAddInterface.IAdd(int a, int b)
        {
            return a + b;
        }
    }

官方定义:
接口仅包含方法,属性,事件,索引器的签名。
在一个类或者结构体在实现一个接口时必须实现这…

 1 interface ISampleInterface
 2 {
 3     void SampleMethod();
 4 }
 5 
 6 class ImplementationClass : ISampleInterface
 7 {
 8     // Explicit interface member implementation: 
 9     void ISampleInterface.SampleMethod()
10     {
11         // Method implementation.
12     }
13 
14     static void Main()
15     {
16         // Declare an interface instance.
17         ISampleInterface obj = new ImplementationClass();
18 
19         // Call the member.
20         obj.SampleMethod();
21     }
22 }

      
C
c=new
C
();

浅析C#接口特点及实例应用

     
C#接口(interface)的掌握对我们开发有什么作用呢?C#接口的使用能够使我们的程序有什么改进?那么我们首先我们来看看C#接口特点以及具体的实例使用分析:

  • C#接口特点1:都是“虚的”不能被实例化,这也是接口中为什么不能包含字段--成员变量的原因
  • C#接口特点2:正因为接口是虚的,所以接口内的索引,属性,时间等只能有声明,而不能在接口内实现,具体如何实现是派生接口或者派生类的事.
  • C#接口特点3:都具有模板的性质,如果一个接口或者类从某一个接口继承,它将自动具有被集成者的特征(包括索引,属性,函数,实践等).
  • C#接口特点4:接口支持多重继承,而C#中,类之支持单一继承,接口实际表示的是一种承载能力。

下面是C#接口实例的一个简单定义:

ylg娱乐官网 1

interface 
SampInterface1  
{  
    string   
    this[ int index]  
    {  
        get;  
        set 
    }  
    ;  
    event EventHandler Event;  
    void  Find( int value );  
    //注意此处没有  
    {  
    }  

    string Po  
    int 
   {  
        get;  
        set 
    }  
    ;  
} 

ylg娱乐官网 2

上面的C#接口实例定义了一个索引 this,一个实践Event,一个方法Find和一个属性Point.

ylg娱乐官网 3

public interface SampIneterface:SampIneterface1{   
pravite int a=1;  
void find (int value)  
{  
a+=value;  
}  
event EventHandler Event;  
protected void onEvent()  
{  
if(Event=null)  
{return Event(this.System.EventAgrs.Empty;)}  
}  

1}

ylg娱乐官网 4

 

class
Test

C#接口的定义详解

     
C#接口的定义从技术上讲,接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。

 C#接口的定义一般形式为:

[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]  

C#接口的定义说明:

    ·
attributes(可选):
附加的定义性信息。

    ·
modifiers(可选):
允许使用的修饰符有new和四个访问修饰符。分别是:new、public、protected、internal、private。在一个接口定义中同一修饰符不允许出现多次,new修饰符只能出现在嵌套接口中,表示覆盖了继承而来的同名成员。The
public, protected, internal, and
private修饰符定义了对接口的访问权限。

    · 指示器和事件。

    · identifier:接口名称。

    ·
base-list(可选):
包含一个或多个显式基接口的列表,接口间由逗号分隔。

    ·
interface-body:
对接口成员的定义。

    ·
接口可以是命名空间或类的成员,并且可以包含下列成员的签名:
方法、属性、索引器 。

    ·
一个接口可从一个或多个基接口继承。

ylg娱乐官网,     
接口这个概念在C#和Java中非常相似。接口的关键词是interface,一个接口可以扩展一个或者多个其他接口。按照惯例,接口的名字以大写字母”I”开头。下面的代码是C#接口的一个例子,它与Java中的接口完全一样:

interface IShape  
{   
   void Draw ( ) ;  
}  

如果你从两个或者两个以上的接口派生,父接口的名字列表用逗号分隔,如下面的代码所示:

interface INewInterface: IParent1, IParent2 { }  

     
然而,与Java不同,C#中的接口不能包含域(Field)。另外还要注意,在C#中,接口内的所有方法默认都是公用方法。在Java中,方法定义可以带有public修饰符(即使这并非必要),但在C#中,显式为接口的方法指定public修饰符是非法的。例如,下面的C#接口将产生一个编译错误。

interface IShape { public void Draw( ) ; } 

下面的例子定义了一个名为IControl
的接口,接口中包含一个成员方法Paint:

interface IControl 
{  
void Paint( ) ;  
}  

在下例中,接口 IInterface从两个基接口
IBase1 和 IBase2 继承:

interface IInterface: IBase1, IBase2 {  
   void Method1( ) ;  
   void Method2( ) ;  
} 

 接口可由类实现。实现的接口的标识符出现在类的基列表中。例如:

class Class1: Iface1, Iface2 {  
   // class 成员。  
} 

 类的基列表同时包含基类和接口时,列表中首先出现的是基类。例如:

class ClassA: BaseClass, Iface1, Iface2 {  
  // class成员。  
} 

以下的代码段定义接口IFace,它只有一个方法:

interface IFace {  
 void ShowMyFace( ) ;  
} 

不能从这个定义实例化一个对象,但可以从它派生一个类。因此,该类必须实现ShowMyFace抽象方法:

class CFace:IFace  
{  
  public void ShowMyFace( )   {  
    Console.WriteLine(" implementation " ) ;  
  }   
} 

C#接口的定义之基接口

      一个接口可以从零或多个接口继承,那些被称为这个接口的显式基接口。当一个接口有比零多的显式基接口时,那么在接口的定义中的形式为,接口标识符后面跟着由一个冒号”:”和一个用逗号”,”分开的基接口标识符列表。

C#接口的定义之接口基:

接口类型列表说明:

  •  一个接口的显式基接口必须至少同接口本身一样可访问。例如,在一个公共接口的基接口中指定一个私有或内部的接口是错误的。
  • 一个接口直接或间接地从它自己继承是错误的。
  • 接口的基接口都是显式基接口,并且是它们的基接口。换句话说,基接口的集合完全由显式基接口和它们的显式基接口等等组成。在下面的例子中

ylg娱乐官网 5

interface IControl {  
 void Paint( ) ;  
}  
interface ITextBox: IControl {  
 void SetText(string text) ;  
}  
interface IListBox: IControl {  
 void SetItems(string[] items) ;  
}  
interface IComboBox: ITextBox, IListBox { }  

ylg娱乐官网 6

IComboBox 的基接口是IControl, ITextBox, 和
IlistBox。

  •  一个接口继承它的基接口的所有成员。换句话说,上面的接口IComboBox就像Paint一样继承成员SetText
    和     SetItems。
  • 一个实现了接口的类或结构也隐含地实现了所有接口的基接口。

 C#接口的定义之接口主体

   
一个接口的接口主体定义接口的成员。

interface-body:  
{   
interface-member-declarationsopt } 

转载请注明出处,欢迎邮件交流:zhuanxinxin@foxmail.com

è    
所有接口成员都隐式地具有public访问属性。

详解C#接口以及实现

      
C#接口是什么呢?C#接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。C#接口可以从多个基接口继承,而类或结构可以实现多个接口。C#接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。   

     
C#接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。例子:

ylg娱乐官网 7

interface IMyExample  
{  
  string this[int index]  { get ; set ; }  
 event EventHandler Even ;  
 void Find(int value) ;  
 string Point  { get ; set ; }  
}  
public delegate void EventHandler(object sender, Event e) ;   

ylg娱乐官网 8

    上面例子中的C#接口包含一个索引this、一个事件Even、一个方法Find和一个属性Point。C#接口可以支持多重继承。就像在下例中,接口”IComboBox”同时从”ITextBox”和”IListBox”继承。

ylg娱乐官网 9

interface IControl 
 {  
void Paint( ) ;  
 }  
  interface ITextBox: IControl 
 {  
 void SetText(string text) ;  
}  
  interface IListBox: IControl
  {  
 void SetItems(string[] items) ;  
 }  
  interface IComboBox: ITextBox, IListBox  { }   

ylg娱乐官网 10

     
类和结构可以多重实例化C#接口。就像在下例中,类”EditBox”继承了类”Control”,同时从”IDataBound”和”IControl”继承。

ylg娱乐官网 11

interface IDataBound
  {  
 void Bind(Binder b) ;  
}  
blic class EditBox: Control, IControl, IDataBound 
 {  
  public void Paint( ) ;  
public void Bind(Binder b)  { }  
}  

ylg娱乐官网 12

    
在上面的代码中,”Paint”方法从”IControl”接口而来;”Bind”方法从”IDataBound”接口而来,都以”public”的身份在”EditBox”类中实现。   

C#接口的总结说明:   

    1、C#中的接口是独立于类来定义的。这与
C++模型是对立的,在 C++中接口实际上就是抽象基类。 

    2、接口和类都可以继承多个接口。

   
3、而类可以继承一个基类,接口根本不能继承类。这种模型避免了
C++的多继承问题,C++中不同基类中的实现可能出现冲突。因此也不再需要诸如虚拟继承和显式作用域这类复杂机制。C#的简化接口模型有助于加快应用程序的开发。

   
4、一个接口定义一个只有抽象成员的引用类型。C#中一个接口实际所做的,仅仅只存在着方法标志,但根本就没有执行代码。这就暗示了不能实例化一个接口,只能实例化一个派生自该接口的对象。

   
5、接口可以定义方法、属性和索引。所以,对比一个类,接口的特殊性是:当定义一个类时,可以派生自多重接口,而你只能可以从仅有的一个类派生。

  • 方法

  • 属性

  • 索引器

  • 事件

->所有在接口中定义的成员都必须在要实现它的类或结构中实现。

转载:http://www.cnblogs.com/jara/p/3450493.html

接口只包含方法、属性、事件或索引器的签名。 实现接口的类或结构必须实现接口定义中指定的接口成员。 在下面的示例,类 ImplementationClass必须实现一个不具有参数并返回 void 的名为 SampleMethod 的方法。

   
}

 1 interface IPoint
 2 {
 3    // Property signatures:
 4    int x
 5    {
 6       get;
 7       set;
 8    }
 9 
10    int y
11    {
12       get;
13       set;
14    }
15 }
16 
17 class Point : IPoint
18 {
19    // Fields:
20    private int _x;
21    private int _y;
22 
23    // Constructor:
24    public Point(int x, int y)
25    {
26       _x = x;
27       _y = y;
28    }
29 
30    // Property implementation:
31    public int x
32    {
33       get
34       {
35          return _x;
36       }
37 
38       set
39       {
40          _x = value;
41       }
42    }
43 
44    public int y
45    {
46       get
47       {
48          return _y;
49       }
50       set
51       {
52          _y = value;
53       }
54    }
55 }
56 
57 class MainClass
58 {
59    static void PrintPoint(IPoint p)
60    {
61       Console.WriteLine("x={0}, y={1}", p.x, p.y);
62    }
63 
64    static void Main()
65    {
66       Point p = new Point(2, 3);
67       Console.Write("My Point: ");
68       PrintPoint(p);
69    }
70 }
71 // Output: My Point: x=2, y=3

}

 

->显式接口成员实现可以消除因同时含有多个相同签名的接口成员所引起的多义性。如果没有显式接口成员实现,一个类或结构就不可能为具有相同签名和返回类型的接口成员分别提供相应的实现,也不可能为具有相同签名和不同返回类型的所有接口成员中的任何一个提供实现。

一个接口可从一个或多个基接口继承。

->不同点:
抽象基类不只能够定义一组抽象方法,还可以指定公用的、私有的和受保护的状态数据以及许多可被子类访问的实体方法。

作者:耑新新,发布于  博客园

interface
IA

 

2.      
接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;

示例

 

当基类型列表包含基类和接口时,基类必须是列表中的第一项。

}

示例

4.      
抽象类实现了OOP中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义不可变的,而把可变的由子类去实现;

下面的示例演示了接口实现。 在此示例中,接口包含属性声明,类包含实现。 实现 IPoint 的类的任何实例都具有整数属性 x 和 y。

}

接口可以是命名空间或类的成员,并且可以包含下列成员的签名:

3.      
一个类一次可以实现若干个接口,但是只能扩展一个父类;

实现接口的类可以显式实现该接口的成员。 显式实现的成员不能通过类实例访问,而只能通过接口实例访问。

显式接口实现:

      
Console
.WriteLine(“IB.F()”);

 }

   
{

1.      
显式强制转换: IPointy a =(
IPointy)b; 需要使用结构化异常处理;不推荐。

接口与抽象类的对比:

   
{

class
B:IA

->相同点: 当一个类派生自抽象基类时,
它必须实现抽象方法的细节(倘若派生类没有声明为抽象的)

完全限定接口成员名:

   
publicvoid
F()

->一个类若继承了某个接口的实现,则只要将该接口列入它的基类列表中,就可以重新实现该接口。

è    
接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。

interface
IBC:
IB,IC

   

 

 

   
void
F();

定义:接口就是语义相关的一个或多个抽象成员组成的命名集合。接口表示的是指定的类或结构需要支持的行为。

发表评论

电子邮件地址不会被公开。 必填项已用*标注