C# 如何获取已传递给方法的类
我有一个具有9个不同属性的类,每个属性都是一个类C# 如何获取已传递给方法的类,c#,.net,C#,.net,我有一个具有9个不同属性的类,每个属性都是一个类 public class Vehicles { Car car; //class Train train; //class Plane plane; //class } 我将此车辆对象传递给一个方法 比如说 var Vehicles = new Vehicles(); Vehicles.Car = new Car() Object1.WorkOutTransport(vehicle) 在Object1中,我需要做的是在不使用
public class Vehicles
{
Car car; //class
Train train; //class
Plane plane; //class
}
我将此车辆对象传递给一个方法
比如说
var Vehicles = new Vehicles();
Vehicles.Car = new Car()
Object1.WorkOutTransport(vehicle)
在Object1中,我需要做的是在不使用switch语句和检查其他语句是否为null的情况下确定实例化了哪个“vehicle”
这不是一个“家庭作业问题”…我简化了它,只是为了说明问题
实际车辆类有9个可能的类,如果您使用不同的属性,则可以实例化这些类,不能避免检查哪个为空或不为空。我建议使用具有标识类型的属性的基类或重写
ToString
方法。我建议重新考虑您的设计
为什么不让您的所有车辆类型都实现一个通用接口IVehicle
,然后让您的车辆
类拥有一个名为车辆
的属性
你只需要担心一个财产
public Interface IVehicle
{
... //Properties Common to all vehicles
}
public class Car : IVehicle
{
... //Properties to implement IVehicle
... //Properties specific to Car
}
public class Vehicles
{
public IVehicle Vehicle { get; set; }
}
var vehicles = new Vehicles();
vehicles.Vehicle = new Car();
... //Do whatever else you need to do.
假设只有一个为非null,则可以执行以下操作:
Vehicle instance = vehicle.Car ?? vehicle.Train ?? vehicle.Plane;
但是如果你想对你的实例做任何有用的事情
你必须检查typeof(instance)
并将它转换到正确的类中
你可能只想考虑一个属性:
public class Vehicles
{
public Vehicle VehicleInstance {get; set;}
}
并移动功能,以便您的WorkOutTransport方法可以作用于
车辆
实例,而不必关心它有哪个子类。在Vehicle
类中使用virtual
或abstract
方法,并在子类中覆盖它们。您可以强制接口继承器指定它们的类型:
enum VehicleType
{
Passenger,
Truck,
// Etc...
}
public Interface IVehicle
{
VehicleType Type { get; }
... // Properties Common to all vehicles
}
public sealed class Truck : IVehicle
{
// ... class stuff.
// IVehicle implementation.
public VehicleType Type { get { return VehicleType.Truck; } }
}
这将允许您不查看每个类,而是确切地知道要转换为什么类型
IVehicle vehicle = GetVehicle();
switch (vehicle.Type)
case (VehicleType.Truck)
{
// Do whatever you need with an instance.
Truck truck = (Truck)vehicle;
break;
}
// ... Etc
除了
开关
之外,你还有其他的方法吗汽车
,火车
,飞机
,等等都有一个共同的父类?我觉得这是一个有共同的“车辆”父类的地方,我想@Blorgbeard的意思是,它们是否都继承了相同的基类?@kurasa每种车辆类型需要一个属性吗?如果get/set是公共属性,没有逻辑,它们应该是变量。只是好奇,为什么它们应该是变量?我同意@你的理由是什么?我会说恰恰相反。使用字段而不是属性会使您无法在自己喜欢的情况下使用它们。例如asp.NET中的序列化和数据绑定如果属性的getter/setter后面没有逻辑,并且两者都是公共的,那么为什么要在您只需要变量的情况下创建一个指向变量的指针呢@JefferyKhan是对的,如果你知道你为什么要使用它们,它们是很棒的。只是我见过很多房产没有真正用途的案例。