繁体   English   中英

C#:如何使用反射来投射对象?

[英]C#: How can I use reflection in order to cast an object?

public static void myMethod(Object myObject)
{

}

我的对象是SportCar类型。 我如何创建一个新的对象(类似这样的东西)

SportCart sportCar = myObject as SportCar

稍后编辑:我不知道myObject的类型是什么。 可能是SimpleCar,AbcCar等

通常在这里使用接口。 在您的情况下, myMethod必须对传入的参数进行特定的处理。 例如说myMethod负责启动汽车,您将定义一个接口,例如

public interface ICar
{
    void Start()
}

然后, myMethod的参数将为ICar类型,而不是object类型。

public void myMethod(ICar car)
{
   car.Start();
}

现在mymethod并不需要知道(或关心!)什么ICar呈现,无论是AbcCar,跑车等,只要是类实现ICar

public class SportsCar : ICar
{
   public void Start() 
   {
      Console.WriteLine("Vroom Vroom. SportsCar has started");
   }
}

public class AbcCar : ICar
{
   public void Start() 
   {
      Console.WriteLine("Chug Chug. AbcCar has started");
   }
}

听起来您想要两件事之一。 具有Car所有共享行为的基类Car或ICar接口,然后可以执行以下操作:

ICar car = myObjectAsCar;
car.Drive(Speed.VeryFast);

或者,您想要做不同的事情,具体取决于它是什么类型的汽车:

if (SportCar sporty = myObject as SportCar)
{
     sporty.Drive(Speed.VeryFast);
}
if (HybridCar hybrid = myObject as HybridCar)
{
     hybrid.Drive(Speed.Economical);
}

汽车类是否具有通用类型,而您只想强制转换为该类型,即:

BaseCar baseCar = myObject as BaseCar;

或者您是要先检查类型,然后将其转换为正确的类型,即:

if(myObject is SimpleCar)
{
  var simpleCar = myObject as SimpleCar;
}

如果您打算进行第二次操作,强烈建议您使用第一项。 而且,如果您使用的是第一辆车,则无需担心它是哪种类型的汽车。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM