2013-02-13 21 views
2

我想知道如果這樣的事情是可能的...您可以根據傳遞的參數構造不同的派生類嗎?

class Thing 
{ 
     public Thing(int i) 
     { 
     } 
} 

class DerivedThing : Thing 
{ 
     public DerivedThing(int i) 
     { 
     } 
} 

_thing = new Thing(0) 

_derivedthing = new Thing(1) 

如果傳遞0,你得到的東西,如果你通過1你會得到一個DerivedThing 這是不完整的,只是一個例證..但基本上我想知道是否/如何基於傳遞給基類構造函數的參數的值返回不同的派生類? 或者你是否需要另外一點代碼來決定調用哪個構造函數?

+3

你可能尋找某種工廠模式。 – Syjin 2013-02-13 15:46:59

+0

爲什麼是基類?爲什麼不是某種類的工廠? – Lloyd 2013-02-13 15:47:10

回答

7

要回答你的問題:不,這是不可能的。但是...

您實際上正在尋找Factory模式。您可以輕鬆地在工廠方法中添加區分if/case,並且仍然具有相對乾淨的代碼。

Factory pattern description

3

這是不可能的。

取而代之,您可以制定一個決定調用哪個構造函數的方法static Thing Create(int i)

1

沒有,爲什麼你要?

您不妨鍵入

var thing = new Thing(); 

var derivedThing = new DerivedThing(); 

你可以像,

public static class ThingFactory 
{ 
    public interface IThing {} 

    public enum ThingType 
    { 
     Thing, 
     DerivedThing 
    } 

    public static IThing CreateThing(ThingType type) 
    { 
     switch(type) 
     { 
      case ThingType.DerivedThing: 
       return new DerivedThing(); 

      default: 
       return new Thing(); 
     } 
    } 

    private class Thing : IThing {} 

    private class DerivedThing : Thing {} 
} 

允許,

var thing = ThingFactory.CreateThing(ThingType.Thing); 

var derivedThing = ThingFactory.CreateThing(ThingType.DerivedThing); 
相關問題