日期:2014-05-18  浏览次数:20907 次

关于接口的一个小问题
//   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);
      }
}


在构造PrintPoint()方法时为什么使用的是接口的对象作为参数。接口不是不能实例化的么?那为什么能够用它来作为方法的参数呢?


------解决方案--------------------
他将接口作为参数不是不对,虽然接口不能实例化,但是 继承了接口的类 实例化后,把类赋值给接口变量,这样就可以调用了。
比如:
interface IPoint
{
// Property signatures:
int x
{
get;
set;
}

int y
{
get;
set;