接口成员类型定义是禁止的,此句话困惑了我好长时间了,求高手给予指导说明

解决方案 »

  1.   


    接口只包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的,如下面的示例所示:复制
            interface ISampleInterface
    {
        void SampleMethod();
    }class ImplementationClass : ISampleInterface
    {
        // Explicit interface member implementation: 
        void ISampleInterface.SampleMethod()
        {
            // Method implementation.
        }    static void Main()
        {
            // Declare an interface instance.
            ISampleInterface obj = new ImplementationClass();        // Call the member.
            obj.SampleMethod();
        }
    }
    备注
    --------------------------------------------------------------------------------接口可以是命名空间或类的成员,并且可以包含下列成员的签名: •方法•属性•索引器•事件一个接口可从一个或多个基接口继承。当基类型列表包含基类和接口时,基类必须是列表中的第一项。实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问,例如:有关显式接口实现的更多详细信息和代码示例,请参见显式接口实现(C# 编程指南)。示例
    --------------------------------------------------------------------------------下面的示例演示了接口实现。在此例中,接口 IPoint 包含属性声明,后者负责设置和获取字段的值。Point 类包含属性实现。复制// keyword_interface_2.cs
    // Interface implementation
    using System;
    interface IPoint
    {
       // Property signatures:
       int x
       {
          get;
          set;
       }   int y
       {
          get;
          set;
       }
    }class Point : IPoint
    {
       // Fields:
       private int _x;
       private int _y;   // Constructor:
       public Point(int x, int y)
       {
          _x = x;
          _y = y;
       }   // Property implementation:
       public int x
       {
          get
          {
             return _x;
          }      set
          {
             _x = value;
          }
       }   public int y
       {
          get
          {
             return _y;
          }
          set
          {
             _y = value;
          }
       }
    }class MainClass
    {
       static void PrintPoint(IPoint p)
       {
          Console.WriteLine("x={0}, y={1}", p.x, p.y);
       }   static void Main()
       {
          Point p = new Point(2, 3);
          Console.Write("My Point: ");
          PrintPoint(p);
       }
    }
    输出
    My Point: x=2, y=3
    http://msdn.microsoft.com/zh-cn/library/87d83y5b(VS.80).aspx
      

  2.   

    与“定义(definition)”相对于的是“声明(declaration)”。这组概念是从C语言时代就有的,要区别其实也很简单,就是看变量有没有分配内存,声明是不分配任何内存的,而定义是要给变量分配内存的(google for more details)。
    在C#中,接口是用来提供一组其实现类必须实现的方法、属性等,它没有包含任何实现,所以也就不需要分配任何内存,任何成员的内存分配都是在其实现类中完成,这就是“接口成员类型定义是禁止的”的原因。