2014-12-13 7 views
2

다음 코드는 명시 적 인터페이스 구현 구문을 사용하여 'CalcUsable'을 정의해야합니까? (코드의 마지막 줄을보십시오) 명시 적이지 않은 구문 (예 : public decimal CalcUsable)을 사용하는 경우, 구체적으로 다음과 같은 "일관성없는 액세스 가능성"오류가 발생합니다.명시 적 인터페이스 구현이 필요하지만 하나의 인터페이스 만 사용 중입니까?

"매개 변수 유형 ... 목록 인터페이스 IVoucher없는 반면 방법 CalcUsable (...)보다 "

interface IVoucher 
{ 
    string Serial { get; } 
    decimal FaceValue { get; } 
    string DiscountType { get; } 
    string ApplyMsg { get; } 
    string RejectMsg { get; } 
    decimal CalcUsable(List<Product> products, List<IVoucher> vouchers); 
} 

// 'GiftVoucher' models the simple voucher which has no use restrictions. 
// 
public class GiftVoucher : IVoucher 
{ 
    public string Serial { get; private set; } 
    public decimal FaceValue { get; private set; } 
    public string DiscountType { get; private set; } 
    public string ApplyMsg { get; private set; } 
    public string RejectMsg { get; private set; } 

    public GiftVoucher(string serial, decimal faceValue) 
    { 
     Serial = serial; 
     FaceValue = faceValue; 
     ApplyMsg = string.Empty; 
     RejectMsg = string.Empty; 
     DiscountType = "Gift"; 
    } 

    // 'CalcUsable' provides the voucher applicability logic. 
    // 
    decimal IVoucher.CalcUsable(List<Product> products, List<IVoucher> vouchers) 
    { 
     blar, blar, blar... 
+3

공개 인터페이스로 설정해보세요 – JRLambert

+0

고맙습니다. 그런데 왜 ??? – CodeCabbie

답변

3

클래스 GiftVoucher 공용이다. 따라서 CalcUsable은 접근 할 수없는 유형 List을 사용하기 때문에 IVoucher을 사용할 수없는 곳에서는 호출 할 수 없습니다.

JRLambert가 제안 했으므로 인터페이스를 공개하면이를 해결해야합니다.

+0

나는 Interface의 기본 접근성이 공개적이라고 생각 했습니까? 그렇지 않다면 무엇입니까? – CodeCabbie

+2

C#의 유형에 대한 기본 액세스 수정자는 '내부'입니다 (중첩 된 유형에 대해서는 확실하지 않습니다). – Dennis

+0

'public' 수정자를 클래스에서 제거하는 것이 더 좋을 수도 있습니다 (인터페이스와 마찬가지로'internal '으로 만들 수 있습니다). –