类库的代码如下: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)这一句,为什么函数的参数里面是接口加上类的名字呢,而且中间还没有逗号来隔开,明明程序主体部分调用这个函数时候,参数是实例化的一个对象啊,这表示的是什么意思呢?

解决方案 »

  1.   

    就是定义了一个IPassengerCarrier类型的变量 Vehicle啊。 
        public interface IPassengerCarrier 
        { 
        }
    这个类型。因为下面的 
                AddPassenger(new SUV()); 
                AddPassenger(new Compact()); 
                AddPassenger(new PassengerTrain()); 
                AddPassenger(new Pickup()); 
    这四种对象都实现了IPassengerCarrier接口,也就是说是IPassengerCarrier接口的子类,
    是面向对象 多态特点的应用。
      

  2.   

    SUV,Compact,PassengerTrain,Pickup都是继承了IPassengerCarrier ,这样在Main调用AddPassenger,传递参数只要是继承IPassengerCarrier 的类都可以传递
      

  3.   

    那意思就是说,比如单拿Pickup这个类来说:AddPassenger(new Pickup());这句就是在函数AddPassenger里实例化了一个Pickup类的对象,然后IPassenger Vehicle等于说是把实例化的Pickup类的对象传递到自定义的函数里面,然后输出对象的内容,用IPassenger来定义就是说只能传递继承了IPassenger这个接口的类的对象,其他的不能被传递是这个意思吗?
      

  4.   

    AddPassenger(new Pickup());这句就是在函数AddPassenger里实例化了一个Pickup类的对象,然后IPassenger Vehicle等于说是把实例化的Pickup类的对象传递到自定义的函数里面,然后输出对象的内容,用IPassenger来定义就是说只能传递继承了IPassenger这个接口的类的对象,其他的不能被传递 
    ==
    正确,这也是多态的一种形式
      

  5.   

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