为什么以下代码必须具有“CalcUsable”'使用显式接口实现语法定义? (参见最后一行代码)如果我使用非显式语法(即公共十进制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...
答案 0 :(得分:3)
类GiftVoucher
是公共的,而接口IVoucher
则不是。因此,无法从CalcUsable
不可用的任何地方调用IVoucher
,因为该方法采用的List
类型无法访问。
正如JRLambert建议的那样,公开界面应该解决这个问题。