2016-06-09 22 views
0

我想擁有一個通用類的實例並在該實例中加載數據。示例代碼被給定爲下:將數據加載到通用類C的對象中#

public class AuthorCollector : EvoObjectCollector<Author> 
{ 
    static ConnectionClass _cs = new ConnectionClass(); 
    SqlConnection _con; 
    public AuthorCollector() 
    { 
     _con = _cs.GetConnection(); 
    } 

    public override List<Author> CollectAuthors(int _startYear, int _endYear) 
    { 
     List<Author> _eAthors = new List<Author>(); 
     // ... method implementation... 
     // ... using SqlDataReader 
     return _eAuthors; 
    } 
} 

,並在主類

public class Test 
{ 
    public static void Main(String[] _args) 
    { 
     int _ITERATIONS = 100; 
     // EvoNetwork main class 
     EvoNetwork<Author> _mEvoNetwork = new EvoNetwork<Author>(/*constructor properties*/); 

     // Create a collector which collects Author from DB. 
     EvoObjectCollector<Author> _mCollector = new AuthorCollector(); 

     // Create a converter which converts Author into EvoObject. 
     EvoObjectConverter<Author> _mConverter = new AuthorPCVConverter(); 

     var _result = _mEvoNetwork.Build(_mCollector, _mConverter, _ITERATIONS); 

     // ... rest of the implementation... 
    } 
} 

我想有數據在_mCollector即創建的EvoObjectCollector<Author>對象。
我應該把CollectAuthors()類的方法AuthorCollector()裏面的構造函數獲取數據作爲類的對象創建?

回答

1

不,你不應該在構造函數中使用可重寫的方法。而是使用構造函數注入或在之後調用initialize方法。這可以通過使用調用initialize方法的factory來抽象並返回初始化對象。

另一種可能性是使用_startYear_endYear作爲構造函數的輸入參數,並調用初始化對象的私有方法。

你可以改變你的設計像如下:

public abstract class EvoObjectCollector<T> { 

    protected List<T> collection; 

    // Instead of the startYear and the endYear a CollectionContext could be added 
    public abstract void Collect(int startYear, int endYear); 

    public List<T> GetCurrentCollection() { 
     return collection; 
    } 
} 

public AuthorCollector : EvoObjectCollector<Author> { 

    public AuthorCollector(int startYear, int endYear) { 
     Collect(startYear, endYear); 
    } 

    public void Collect(int startYear, int endYear) { 
     // Collect the collection 
     collection = ... 
    } 
} 
+0

如果我提供'_startYear'和'_endYear'作爲輸入參數的構造函數,那麼私有方法調用,即'CollectAuthor()'將是相同的構造函數裏面? – maliks

+0

是的,當它是一個'private'方法時,所以沒有人可以改變方法的邏輯。 –

+0

你的意思是我應該定義構造函數爲: 'public AuthorCollector() { _con = _cs.GetConnection(); } public AuthorCollector(int _startYear,int _endYear) { CollectAuthors(_startYear,_endYear); }' – maliks