大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > C#接口知识大全收藏

C#接口知识大全收藏(3)

关键词:接口收藏知识大全  阅读(3594) 赞(20)

[摘要]接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。

下面例子中接口IMyTest包含了索引指示器、事件E、 方法F、 属性P 这些成员:


interface IMyTest{
 
  string this[int index] { get; set; }
 
  event EventHandler E ;
 
  void F(int value) ;
 
  string P { get; set; }
 
 }
 
 public delegate void EventHandler(object sender, EventArgs e) ;


下面例子中接口IStringList包含每个可能类型成员的接口:一个方法,一个属性,一个事件和一个索引。


public delegate void StringListEvent(IStringList sender);
public interface IStringList
{
void Add(string s);
int Count { get; }
event StringListEvent Changed;
string this[int index] { get; set; }
}


接口成员的全权名

使用接口成员也可采用全权名(fully qualified name)。接口的全权名称是这样构成的。接口名加小圆点"." 再跟成员名比如对于下面两个接口:


interface IControl {
void Paint( ) ;
}
interface ITextBox: IControl {
void GetText(string text) ;
}


其中Paint 的全权名是IControl.Paint,GetText的全权名是ITextBox. GetText。当然,全权名中的成员名称必须是在接口中已经定义过的,比如使用ITextBox.Paint.就是不合理的。

如果接口是名字空间的成员,全权名还必须包含名字空间的名称。


namespace System
{
public interface IDataTable {
object Clone( ) ;
}
}


那么Clone方法的全权名是System. IDataTable.Clone。

定义好了接口,接下来就是怎样访问接口,请看下一节--访问接口

第四节、访问接口

对接口成员的访问

对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的。如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员。但由于接口支持多继承,在多继承中,如果两个父接口含有同名的成员,这就产生了二义性(这也正是C#中取消了类的多继承机制的原因之一),这时需要进行显式的定义:


using System ;
 
 interface ISequence {
 
  int Count { get; set; }
 
 }
 
 interface IRing {
 
  void Count(int i) ;
 
 }
 // http://www.daxueit.com
 interface IRingSequence: ISequence, IRing { }
 
  class CTest {
 
   void Test(IRingSequence rs) {
 
    //rs.Count(1) ; 错误, Count 有二义性
 
    //rs.Count = 1; 错误, Count 有二义性
 
    ((ISequence)rs).Count = 1; // 正确
 
    ((IRing)rs).Count(1) ; // 正确调用IRing.Count
 
   }
 
 }




相关评论