2011-02-14 85 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; 
} 

如果你正在考慮做第二個,我強烈建議你使用第一個。如果你使用第一個,你不必擔心它是什麼類型的汽車。