C# 正在行驶的车辆c=新驾驶员();在C中#

C# 正在行驶的车辆c=新驾驶员();在C中#,c#,class,object,C#,Class,Object,假设我们有两类车和司机, 我们可以使物体像 Car c=new Driver(); 并且能够呼叫汽车类而非驾驶员类的成员为什么和何时 如果您确定汽车实际上是驾驶员,则可以将其转换为驾驶员,以访问驾驶员的成员。所以 ((Driver)c).DriverMember(); 如果c不是Driver 或 原因是由于c属于Car类型,因此只有Car的成员可用 例如,假设您有列表,其中添加了一些汽车对象和一些驾驶员对象。然后它给人一种完美的感觉,即只有汽车的成员才可以使用 此外,在这种情况下,我假设Dr

假设我们有两类车和司机,
我们可以使物体像

Car c=new Driver();

并且能够呼叫汽车类而非驾驶员类的成员为什么和何时

如果您确定
汽车
实际上是
驾驶员
,则可以将其转换为
驾驶员
,以访问
驾驶员
的成员。所以

((Driver)c).DriverMember();
如果
c
不是
Driver

原因是由于
c
属于
Car
类型,因此只有Car的成员可用

例如,假设您有
列表
,其中添加了一些
汽车
对象和一些
驾驶员
对象。然后它给人一种完美的感觉,即只有
汽车的成员才可以使用


此外,在这种情况下,我假设
Driver
继承自
Car
(这实际上是一种非常奇怪的继承,因为驾驶员不是汽车)。

即使引用
c
指向
Driver
对象,引用的类型(
Car
)确定可以对其调用哪些方法


作为旁注,将
Driver
作为从
Car
派生的类没有多大意义。类继承通常可以表示为“is-a”关系,大多数驱动程序不是汽车。

在您的情况下,汽车是驱动程序的基类。这就是为什么您可以创建一个新的驾驶员对象,但将其“放入”汽车对象中


但是为什么只有“car”类的成员是可见的,你的对象c来自类型Car,而不是类型Driver,Car的成员比Driver少。

试着发布更多的代码——没有更多的上下文很难帮助你。除非
Driver
以某种方式继承了
Car
(这没有意义),否则你怎么能创建这样的对象呢,我知道答案为什么,但我想知道为什么,什么时候可能?
Driver d = c as Driver;
if( d != null ){
  d.DriverMethod();
}