关于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一样,只是个变量