2011-02-14 83 views
0
public static void myMethod(Object myObject) 
{ 

} 

我的对象属于SportCar类型。我怎么能创建一个新的对象(类似这样的)C#:我如何使用反射来投射物体?

SportCart sportCar = myObject as SportCar 

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

+0

您是否尝试过运行该行? (另外`as`不是我认为的反射的一部分,如果它不是100%必要的,你不应该使用反射。) – BoltClock 2011-02-14 09:20:06

回答

4

这通常是您要使用接口的地方。在你的情况下,myMethod必须做一些具体的事情,通过传递的参数。让我们举一个简单的例子;说myMethod负责启动车辆,你会定义一个接口如

public interface ICar 
{ 
    void Start() 
} 

然后参数myMethodICar类型而不是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"); 
    } 
} 
1

这听起来像你想要两件事中的一件。要么有一个基类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); 
} 
0

不要将车班有一个共同的类型,只是想和你投给即:

BaseCar baseCar = myObject as BaseCar; 

或者是你想检查的类型,然后再转换为正确的类型,即:

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

如果你正在考虑做第二个,我强烈建议你使用第一个。如果你使用第一个,你不必担心它是什么类型的汽车。