2014-03-13 75 views
0

例如說我有以下類:C#調用構造函數

class SuperModel 
{ 
    private OracleProvider database; 
    private SqlTemplates template; 
    public SuperModel() 
    { 
     this.database = new OracleProvider(); 
     this.template = new SqlTemplates(database); 
    } 

    protected SqlTemplates getTemplate() 
    { 
     return this.template; 
    } 
} 

現在我有延長上述下面的類:全自動稱爲

class Henvendelser : SuperModel 
{ 
    public Henvendelser() 
    { 

    } 

    public ArrayList getQueue(DateTime start, DateTime end) 
    { 
     String sql = 
       "SELECT                  " + 
       " TIDSPUNKT,                " + 
       " NVL(QUEUE,' ') AS QUEUE,            " + 
       " NVL(SUM(ANTAL_KALD),0) AS CALLS,          " + 
       " NVL(SUM(ANTAL_BESVARET),0) AS ANSWERED_CALLS,       " + 
       " NVL(SUM(BESVARET_25_SEK),0) AS ANSWERED_CALLS_25_SEC,     " + 
       " NVL(SUM(INTERN_KALD),0) AS INTERNAL_CALLS        " + 
       "FROM                  " + 
       " KS_DRIFT.PERO_NKM_KØ_OVERSIGT           " + 
       "WHERE                  " + 
       " TIDSPUNKT >= '" + start+ "' AND           " + 
       " TIDSPUNKT <= '" + end + "' AND           " + 
       " TO_CHAR(TIDSPUNKT,'DY') NOT IN ('AB')         " + 
       "GROUP BY                 " + 
       " QUEUE                 " + 
       "ORDER BY                 " + 
       " TIDSPUNKT                "; 

     ArrayList result = this.getTemplate().template(sql, SqlTemplates.READ_FROM_QUERY); 
     return result; 
    } 
} 

SuperModel的構造或者我必須做些什麼才能確保它被稱爲?

+0

您可能會發現具有說明性的字符串更加舒適 – BlackBear

+0

具有說明性的字符串?對不起,我剛剛處理了C#只處理了java –

+0

通過在@前加一個字符串,你可以在裏面有換行符,而且你不需要轉義'\'(這對路徑很有用)。 http://tutorials.csharp-online.net/CSharp_FAQ:_What_is_a_verbatim_string_literal – BlackBear

回答

5

在您的特定代碼中,它被隱式調用。要明確地調用它,您將需要使用base關鍵字。

請參見:Using Constructors C#

在派生類中,如果一個基類的構造函數沒有被使用基本關鍵字,默認構造方法中調用 明確,如果 還有一個,是隱式調用。

所以你在派生類的構造函數:

public Henvendelser() 

是在你的代碼等於

public Henvendelser() :base() 

其他稍加觀察:

  1. 使用List<T>,而不是ArrayList
  2. 使用參數與您的查詢,而不是字符串連接。請參閱Sql Injection
+0

你什麼時候需要明確使用? –

+1

@MarcRasmussen,如果基類中沒有默認(無參數)構造函數, – Habib

+0

@MarcRasmussen,我正在使用ArrayList,因爲我試圖使它儘可能通用,並且使用ArrayList,我不必指定進入的內容列表? –