using System;
using System.Collections;
public class SamplesArrayList  {
   public class myReverserClass : IComparer  {
      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }   }   public static void Main()  {
 
      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "QUICK" );
      myAL.Add( "BROWN" );
      myAL.Add( "FOX" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );
 
      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintIndexAndValues( myAL );      // Sorts the values of the ArrayList using the default comparer.
      myAL.Sort( 1, 3, null );
      Console.WriteLine( "After sorting from index 1 to index 3 with the default comparer:" );
      PrintIndexAndValues( myAL );      // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      IComparer myComparer = new myReverserClass();
      myAL.Sort( 1, 3, myComparer );
      Console.WriteLine( "After sorting from index 1 to index 3 with the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myAL );   }
 
   public static void PrintIndexAndValues( IEnumerable myList )  {      int i = 0;
      System.Collections.IEnumerator myEnumerator = myList.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "\t[{0}]:\t{1}", i++, myEnumerator.Current );
      Console.WriteLine();   }}
这行代码37行IComparer myComparer = new myReverserClass();这行是申请了一个接口的一个实例
但是为什么不是IComparer myComparer = new IComparer();而是new myReverserClass();????????

解决方案 »

  1.   

    你什么时候看到接口可以实例化的,myReverserClass不是实现了IComparer 接口了吗,多态
      

  2.   

    IComparer myComparer = new IComparer();
    接口可以看成是你的方法的名称定义的结合具体的是实现是需要在 继承接口的类中的
    上面那样的myConparer没有任何使用意义
    因为IComparer 没有被任何实现..
      

  3.   

    因为
    myReverserClass继承了IComparer,要声明的是myReverserClass的实例
      

  4.   

    谢谢楼上的。myReverserClass继承了接口,同时实现了接口的方法,
    IComparer--->myReverserClass,new myReverserClass()这样就相当于接口的实例,这样理解有问题吗
      

  5.   

    你对接口的理解不够清楚,接口本身是没有实例的,它就是一种规范和约定,告诉你,继承这个接口的类需要有哪些成员...实例只是对类来说的,myComparer 只是myReverserClass这个类的实例.
    接口只是一个规约,没有实例