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