public static void myMethod(Object myObject)
{
}
我的对象属于SportCar类型。我怎么能创建一个新的对象(类似这样的)C#:我如何使用反射来投射物体?
SportCart sportCar = myObject as SportCar
后来编辑:我不知道什么是myObject的类型。它可能是SimpleCar,AbcCar等
public static void myMethod(Object myObject)
{
}
我的对象属于SportCar类型。我怎么能创建一个新的对象(类似这样的)C#:我如何使用反射来投射物体?
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
或接口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;
}
如果你正在考虑做第二个,我强烈建议你使用第一个。如果你使用第一个,你不必担心它是什么类型的汽车。
您是否尝试过运行该行? (另外`as`不是我认为的反射的一部分,如果它不是100%必要的,你不应该使用反射。) – BoltClock 2011-02-14 09:20:06