2014-04-26 1 views
1

이것은 간단히 해결할 수 있습니다. 저는 대학생이고 다형성을 시작 했으므로 그 개념은 여전히 ​​저에게 당황 스럽습니다.리터럴 문자열 문제를 상속받은 생성자

abstract class IncreaseTransaction 
{ 
    private string _Description; 
    private decimal _Amount;   

    protected IncreaseTransaction(string description, decimal amount) 
    { 
     _Description = description; 
     _Amount = amount; 
    } 
} 

class Deposit : IncreaseTransaction 
{ 
    public Deposit(string description, decimal amount) : base("Deposit", amount) 
    { 
    } 
} 

static void Main(string[] args) 
{ 
    Customer fred = new Customer("Fred"); 
    SavingsAccount fredSavings = new SavingsAccount(); 
    fredSavings.AddTransaction(new Deposit(500.00M)); 
} 

새 입금이 구체화되면 리터럴 문자열 "입금"을 거래 설명으로 사용하고 싶습니다. 그러나 'SampleNamespace.Deposit에는 하나의 인수를 사용하는 생성자가 포함되어 있지 않습니다.'라는 오류 메시지가 나타납니다. 문자열이 상속되지 않으므로이를 해결하는 방법을 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다!

답변

7

입금에 대한 귀하의 생성자는 두 개의 매개 변수를 취하면 기본()에 대한 호출에서 "예금"을 설정하고 있기 때문에

public Deposit(string description, decimal amount) : base("Deposit", amount) 

를 해당 생성자에서 '문자열 설명을'필요하지 않습니다.

public Deposit(decimal amount) : base("Deposit", amount) 

다음 줄을 더 이상 오류가 발생하지해야합니다 : 그것은 같이한다

fredSavings.AddTransaction(new Deposit(500.00M)); 

추가 설명 : 생성자는 멤버 또는 속성처럼 상속하지만, 아이 모두에 고유하지 않습니다 및 부모. 자식 (Deposit)은 기본 클래스 (IncreaseTransaction) 생성자를 호출해야하지만 자체 생성자에서 동일한 매개 변수를 요구하지 않아도됩니다. Why are constructors not inherited?

+0

내가 다른 일, 컴파일러는 여전히 오류가 발생했습니다 것을 시도 :

다음은이 경우에 왜 이전 (그러나 좋은) 토론이다. 나는 그것이 어떤 이유로 리프레시되지 않았다을 추측한다. 어쨌든 도움 주셔서 감사합니다. – SuperDicko