2016-05-05 6 views
-1

私はガレージを走らせるプログラムを作るために[大学生]という譲渡を受けました。私はすべての車タイプ(FuelMotorcycle、ElectricMotorcycle、FuelCar、ElectricCarなど)のクラスを持っていますが、それぞれの車種には独自のコンストラクタがあり、それらはすべて互いに異なります。 割り当て要件の1つは、 "新しいカーオブジェクトを作成するコードを配置し、このコードだけをプログラムの論理部分のクラスに配置することです。このコード部分は、直接的または間接的にユーザーに向けることはできません" )。明らかにある関数でオブジェクトを作成し、別の関数でオブジェクトを作成できますか?

public static FuelMotorcycle CreateNewFuelMotorcycle() 
     { 
      FuelMotorcycle EmptyFuelMotorcycle; 
      return EmptyFuelMotorcycle; 
     } 

これはコンパイルされませんし、それがなかった場合でも、私はできませんでした: は、だから私はそれを参照してください方法は、私はクラスを持っている、などの方法がありますこと、のは「EmptyCarCreator」と言ってみましょう"FuelMotorcycle"クラスのコンストラクタを返します。 コンストラクタの要素を入力する必要があります。 これを行う他の方法はありますか?私はここで非常に基本的な何かを逃しているように感じる。 英語の誤りを許してください。私の質問がはっきりしたことを願っています。

+2

工場パターンをルックアップします。 – Phaeze

+0

クラスを構築から分離すると、それはBuilderパターンです。 –

+0

'FuelMotorcycle EmptyFuelMotorcycle =新しいFuelMotorcycle();'? – David

答えて

-1

あなたはこのような何か必要があります:

public static class EmptyCarCreator 
{ 
    public static T Create<T>() where T : class, new() 
    { 
     return new T(); 
    } 
} 

その後、あなたはこのようにそれを使用します。これは、パラメータなしのコンストラクタで新しいクラスを作成します

FuelMotorcycle myVehicle = EmptyCarCreator.Create<FuelMotorcycle>(); 

を。

public static class EmptyCarCreator 
{ 
    public static object Create(Type type) 
    { 
     return Activator.CreateInstance(type); 
    } 
} 

はこれを使用するには、この返されたオブジェクトをキャストする必要があります:

は少し良く、このようなパラメータを処理することができるかもしれない他のオプションがあります。

FuelMotorcycle myVehicle = (FuelMotorcycle)EmptyCarCreator.Create(typeof(FuelMotorcycle)); 
+1

なぜ賛成投票ですか? –

関連する問題