2011-11-20 2 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로 선언해야하며 해당 클래스를 추상으로 선언해야합니까?

답변

2

내가 올바른 방향에 있는지 또는 더 나은 방법이 있는지 알려 줄 수 있습니까?

올바른 방법입니다.

AuditableTableServiceEntity의 메소드를 protected로 선언해야하며 해당 클래스를 추상으로 선언해야합니까?

에 달려 있습니다. 사용자가 AuditableTableServiceEntity의 인스턴스를 직접 생성 할 수 있어야합니까? 그렇다면 생성자는 public이어야하며 클래스는 추상이 아니어야합니다.

그러나 사용자가 항상 Note 또는 다른 유사한 클래스를 구성해야하는 경우 보호 된 생성자와 추상 클래스가 적합합니다.

+0

사용자는 AuditableTableServiceEntity의 인스턴스를 직접 구성 할 수 없어야합니다. 그렇다면 생성자를 보호하고 클래스 추상화 및 속성 가상화를해야합니까? 감사합니다 –

+0

@ Melissa 당신이 그것을 건설하고 싶지 않다면, 나는 생성자를 보호하고 클래스 추상을 만들 것입니다. 속성이 가상이어야하는지 여부는 별도의 문제입니다. –

관련 문제