【问题标题】:Object Method Inheritance in C#C#中的对象方法继承
【发布时间】:2012-11-15 02:13:44
【问题描述】:

好的,这需要先进行一些设置。

public interface IPolicyObjectAdapter
{
    PolicyImage GetPolicyImage(BridgePolicy policy);
}

public class BridgePolicyAdapter : IPolicyObjectAdapter
{
    protected virtual PolicyImage GetPolicyImage(BridgePolicy policy)
    {
         AddPolicyInformation(policy);
    }

    protected virtual void AddPolicyInformation(BridgePolicy policy)
    {
       //does stuff
    }
}


public class HSPolicyAdapter : BridgePolicyAdapter, IPolicyObjectAdapter
{
     protected override void AddPolicyInformation(BridgePolicy policy)
     {
          base.AddPolicyInformation(policy);
          //does more stuff
     }
}

当我执行以下代码时,我希望代码进入 HSPolicyAdapter 的 AddPolicyInformation 方法。但它永远不会。它直接进入 BridgePolicyAdapters AddPolicyInformation 方法。

IPolicyObjectAdapter Adapter = null;
Adapter = new HSPolicyAdapter();
PolicyImage image = Adapter.GetPolicyImage(policy);

我确信我遗漏了一些很明显会受伤的东西,但我的大脑现在无法正常工作。我错过了什么?

【问题讨论】:

  • 您正在调用 GetDiamondPolicyImage,但您的源代码显示 GetPolicyImage。请您通过输入正确的代码来澄清一下吗?
  • 另外,您拨打base.AddPolyInformation(polyicy, Img)Img 参数是怎么回事?我认为您需要发布一个实际的工作代码集供我们测试。从表面上看,您的整体概念似乎是正确的,但可能只是一个小小的疏忽,但如果没有您提供更准确的信息,我们无法回答。
  • 另外,你要做的第一件事是调用base.AddPolicty...,所以如果你在那里设置一个断点,它应该会命中。
  • 还要检查一下:GetPolicyImage 返回 PolicyImage 但 AddPolicyInformation 不返回任何内容。
  • @JoshGough,我确实在 HSPolicyAdapter 中对 base.AddPolicyInformation 的调用放置了一个断点,但它从未被触发。

标签: c# oop interface


【解决方案1】:

我拼凑了这个解释,对我来说效果很好:

public class BridgePolicy
{
    public string Name { get; set; }
}

public class PolicyImage
{
    public string Name { get; set; }
}

public interface IPolicyObjectAdapter
{
    PolicyImage GetPolicyImage(BridgePolicy policy);
}

public class BridgePolicyAdapter : IPolicyObjectAdapter
{

    protected virtual void AddPolicyInformation(BridgePolicy policy)
    {
        //does stuff
    }


    public virtual PolicyImage GetPolicyImage(BridgePolicy policy)
    {
        AddPolicyInformation(policy);

        return null;
    }
}


public class HSPolicyAdapter : BridgePolicyAdapter, IPolicyObjectAdapter
{
    protected override void AddPolicyInformation(BridgePolicy policy)
    {
        base.AddPolicyInformation(policy);
        //does more stuff
    }
}


class Program
{
    static void Main(string[] args)
    {
        BridgePolicy p = new BridgePolicy();
        IPolicyObjectAdapter Adapter = null;
        Adapter = new HSPolicyAdapter();
        PolicyImage image = Adapter.GetPolicyImage(p);
    }
}

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 2016-03-26
    • 2013-01-04
    • 1970-01-01
    • 2019-04-27
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多