当前位置: 首页 > 知识库问答 >
问题:

为什么派生类接口的引用显示基类的字段?

太叔逸春
2023-03-14

我正在创建一个带有属性的抽象基类,并在派生类中继承该基类。派生类继承基类和接口。当我试图使用接口引用派生类的对象时,我看到基类的属性也没有在派生类接口中声明。原始代码有点大,但下面是我所遵循的相同方法

基类:

public class PromotionBase : IPromotionBase
{
    private string CurrentPromotion = string.Empty;
    public PromotionBase(string promotionName)
    {
        CurrentPromotion = promotionName;
    }
    public DateTime? StartDate => SettingsManager.GetSettingDateTime(CurrentPromotion, nameof(this.StartDate));
    public DateTime? EndDate => SettingsManager.GetSettingDateTime(CurrentPromotion, nameof(this.EndDate));
    public string PromoCode => SettingsManager.GetSettingString(CurrentPromotion, nameof(this.PromoCode));
    public DateTime? OrderQualificationStartDate => SettingsManager.GetSettingDateTime(CurrentPromotion, nameof(this.OrderQualificationStartDate));
    public DateTime? OrderQualificationEndDate => SettingsManager.GetSettingDateTime(CurrentPromotion, nameof(this.OrderQualificationEndDate));
    public int DiscountPercentage => SettingsManager.GetSettingInt(CurrentPromotion, nameof(this.DiscountPercentage));
    public int UsageLimit => SettingsManager.GetSettingInt(CurrentPromotion, nameof(this.UsageLimit));
    public string ActivePromoTile => SettingsManager.GetSettingString(CurrentPromotion, nameof(this.ActivePromoTile));
    public string EligiblePromoTile => SettingsManager.GetSettingString(CurrentPromotion, nameof(this.EligiblePromoTile));
    public string AddedPromoTile => SettingsManager.GetSettingString(CurrentPromotion, nameof(this.AddedPromoTile));
    public string VerifiedPromoTile => SettingsManager.GetSettingString(CurrentPromotion, nameof(this.VerifiedPromoTile));
}
public class FreeGiftAndShippingPromotionManager : PromotionBase,IFreeGiftAndShippingPromo
{
    public FreeGiftAndShippingPromotionManager() : base(PromotionHelper.PromoName.FreeGiftAndShipping)
    {
    }
    private static Dictionary<int, ProductItemInfo> productItemInfos = null;
    private static DateTime LastProductInfoRefresh = DateTime.MinValue;
    private const int InfoRefreshInterval = 30;
    private const int LowStockLevel = 10;
    public override int GiftProductItemId
    {
        get
        {
            string defaultProductId = "0";
            if(string.IsNullOrEmpty(GiftProductItemIds).Not())
            {
                defaultProductId = "0" + GiftProductItemIds.Split(',').FirstOrDefault();
            }
            return Convert.ToInt32(defaultProductId);
        }
    }
            public ProductItemInfo GetProductInfo(int productItemId)
    {
        GetFreshProductInfos();
        return productItemInfos[productItemId];
    }
}
public interface IFreeGiftAndShippingPromo
{
    DateTime? StartDate { get; }
    DateTime? EndDate { get; }
    string PromoCode { get; }
    DateTime? OrderQualificationStartDate { get; }
    DateTime? OrderQualificationEndDate { get; }
    int PurchaseThreshold { get; }
    int DisplayPriority { get; }
    bool IsActive { get; }
    string PromoTitle { get; }
    string PromoIntro { get; }
    int GiftProductItemId { get; }
    string GiftProductItemIds { get; }
    bool ShowPopup { get; }
    bool OrderMeetsPromoMinPurchase(Order order);
    string GetCartPromoTile(Order order);
    bool OrderEligibleForFreeGift(Order order);
    string EligiblePromoTile { get; }
    string AddedPromoTile { get; }
    string VerifiedPromoTile { get; }
    ProductItemInfo GetProductInfo(int productItemId);
    string GetCartProductGridDisplay();
}
private IFreeGiftAndShippingPromo Instance_FreeGiftAndShippingPromoManager = new FreeGiftAndShippingPromotionManager();

调试器详细信息

多谢.

共有1个答案

司空胤
2023-03-14

调试器显示接口中保存的实际类型,即您在窗口中看到的类型。如果您试图在代码中实际使用ActivePromotile,代码将无法编译。

 类似资料:
  • 在这种情况下,输出将是“base”。 如果我明确地声明派生实现了IBase(实际上已经由基类base实现了,这样的注释似乎没有用),那么输出将是“派生的” 这种行为的原因是什么? VS 15.3.5,C#7

  • 我正在学习一本书,即“.NET域驱动的C#设计”。 问题基于如下类图所示的场景: 图:http://screencast.com/t/a9uuljvw0 现在,如果我用ICompanyRepository变量comrep调用Add()函数... 然后调用RepositoryBase类(它是CompanyRepository的父类)中的Add()函数。 我的问题是:在(抽象基)类“repositor

  • 我有一个应用程序,它由一个服务器组成,该服务器可以有多个两种类型的客户端,即用户客户端和设备客户端。为此,我有一个客户端基类的向量,我将在其中添加新客户端,因为它们连接到服务器。这是我所拥有的简化版本: 我有下面的UML表示: 我怀疑这张图是否代表了正确的意图。也许我对UML不是很有经验,这就足够了,但是我认为这个图没有清楚地描述服务器中的向量将包含用户和设备而不是客户端的事实。我不知道我是否需要

  • 假设我有一个没有数据的类: 和派生类 Empty类的对象的大小为1。派生类的空部分的大小通常为0。据我所知,编译器看到基Empty类没有数据,因此它可以优化Empty的大小,以防它“在”Derived中,但标准并不要求这样做。 所以问题是: 我能在编译时确定Derived类的Empty部分并没有占用内存吗。 我知道我可以像一样进行检查...但它太冗长了,并且有几个类,如派生。有没有更优雅的解决方案

  • 问题内容: 返回所有直接实现的接口,即不遍历类树以获取所有父类型的所有接口。例如,层次结构 对于我想得到,但对于任何任意的树深度。 我可以自己写这个,但是我确定必须有一个已经存在的库,有什么想法吗? 问题答案: Apache Commons Lang 具有您需要的方法: