2011-11-20 44 views
3

我有以下類:如何爲我繼承的類聲明構造函數?

public abstract class TableServiceEntity 
{ 
    protected TableServiceEntity(); 
    protected TableServiceEntity(string partitionKey, string rowKey); 
    ..... 
    ..... 
} 

我從該類繼承如下:

public class AuditableTableServiceEntity : TableServiceEntity 
{ 
    public string CreatedBy { get; set; } 
    ..... 
    ..... 
} 

我使用類,如下所示:

public class Note : AuditableTableServiceEntity 
{ 

    public Note() { } 
    public Note(string dsValue, string pk) 
     : base(pk, Seq.GetNext(dsValue, pk, "Note").ToString("00000")) { } 

失敗說,類AuditableTableServiceEntity沒有一個構造函數 需要兩個參數。爲了解決問題,我嘗試將以下方法添加到AuditableTableServiceEntity中。這是一個有效的事情嗎?還是有其他的方式?另外我注意到它需要我添加一個構造函數,它使用零參數。這是爲什麼?

public AuditableTableServiceEntity() 
     : base() 
    { 
    } 

    public AuditableTableServiceEntity(string pk, string rk) 
     : base(pk, rk) 
    { 
    } 

有人可以給我建議,如果我在正確的軌道上,或者如果有更好的方法做到這一點。我是否應該將AuditableTableServiceEntity上的方法聲明爲protected,還應該將該類聲明爲abstract?

回答

2

有人可以給我建議,如果我在正確的軌道上,或者如果有更好的方式做到這一點。

這是正確的方法。

我是否應該將AuditableTableServiceEntity上的方法聲明爲protected,還應該將該類聲明爲abstract?

這取決於。用戶應該能夠直接構建一個AuditableTableServiceEntity的實例嗎?如果是這樣,那麼構造函數應該是公開的,並且該類不應該是抽象的。

但是,如果它沒有意義,並且用戶應始終構造一個Note或其他類似的類,那麼受保護的構造函數和抽象類是適當的。

+0

用戶不應該能夠直接構造AuditableTableServiceEntity的實例。那麼我應該讓構造函數受到保護,並且類抽象和屬性是虛擬的嗎?謝謝 –

+0

@Melissa如果你不想讓用戶構造它,我會使構造函數受到保護,並且抽象類。這些屬性是否應該是虛擬的是一個單獨的問題... –