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

关于C#的一个类库的题目,函数实例调用部分有点不懂!
类库的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyFirstLib
{
  public abstract class Vehicles
  {
  }

  public interface IPassengerCarrier
  {
  }

  public interface IHeavyLoadCarrier
  {
  }

  public abstract class Car : Vehicles
  {
  }

  public abstract class Train : Vehicles
  {
  }

  public class Compact : Car, IPassengerCarrier
  {
  }

  public class SUV : Car, IPassengerCarrier
  {
  }

  public class Pickup : Car, IPassengerCarrier, IHeavyLoadCarrier
  {
  }

  public class PassengerTrain : Train, IPassengerCarrier
  {
  }

  public class FreightTrian : Train, IHeavyLoadCarrier
  {
  }

  public class T242DoubleBogey : Train, IHeavyLoadCarrier
  {
  }
}


应用程序的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyFirstLib;

namespace Traffic
{
  class Class1
  {
  static void Main(string[] args)
  {
  AddPassenger(new SUV());
  AddPassenger(new Compact());
  AddPassenger(new PassengerTrain());
  AddPassenger(new Pickup());
  }

  static void AddPassenger(IPassengerCarrier Vehicle)
  {
  Console.WriteLine(Vehicle.ToString());
  Console.ReadKey();
  }
  }
}

题目是让用应用程序要包括函数AddPassenger(),来接受任何带有IPassengerCarrier接口的对象,在每个对象上调用派生于System.Object的To.String()方法,并把结果输出到屏幕上

类库部分是我自己写的,应用程序部分是看答案的,我不是很懂函数自定义的部分,特别是static void AddPassenger(IPassengerCarrier Vehicle)这一句,为什么函数的参数里面是接口加上类的名字呢,而且中间还没有逗号来隔开,明明程序主体部分调用这个函数时候,参数是实例化的一个对象啊,这表示的是什么意思呢?

------解决方案--------------------
就是定义了一个IPassengerCarrier类型的变量 Vehicle啊。 
public interface IPassengerCarrier 

}
这个类型。

因为下面的 
AddPassenger(new SUV()); 
AddPassenger(new Compact()); 
AddPassenger(new PassengerTrain()); 
AddPassenger(new Pickup()); 
这四种对象都实现了IPassengerCarrier接口,也就是说是IPassengerCarrier接口的子类,
是面向对象 多态特点的应用。
------解决方案--------------------
SUV,Compact,PassengerTrain,Pickup都是继承了IPassengerCarrier ,这样在Main调用AddPassenger,传递参数只要是继承IPassengerCarrier 的类都可以传递
------解决方案--------------------
AddPassenger(new Pickup());这句就是在函数AddPassenger里实例化了一个Pickup类的对象,然后IPassenger Vehicle等于说是把实例化的Pickup类的对象传递到自定义的函数里面,然后输出对象的内容,用IPassenger来定义就是说只能传递继承了IPassenger这个接口的类的对象,其他的不能被传递 
==
正确,这也是多态的一种形式
------解决方案--------------------
static void AddPassenger(IPassengerCarrier Vehicle) 

Console.WriteLine(Vehicle.ToString()); 
Console.ReadKey(); 

其实你可以这么理解 Vehicle只是个变量名,而并非是类 Vehicle的类型是 实现IPassengerCarrier接口的所有类型 这里的Vehicle只是一个变量名
和 Class1 myClass = new Class1(); 的myClass一样,只是个变量