c#虚拟法

c#虚拟法,c#,class,virtual,C#,Class,Virtual,我有基类和执行虚方法。我重写派生类中的execute方法。 在这种流中是否可以执行虚拟方法代码 虚拟基方法代码执行 重写的方法代码执行 虚拟基方法代码执行 我不确定我是否解释得很好,但我希望我的问题得到解释:) 应该可以从方法中调用base.Execute() 更多信息:应该可以从方法中调用base.Execute() 更多信息:否,您需要以下信息: 不,您要的是以下内容: Jon,这如何允许派生类在派生功能之前和之后调用基类方法?这不是OP要求的吗?@Jon,你的代码有问题。Converter

我有基类和执行虚方法。我重写派生类中的execute方法。 在这种流中是否可以执行虚拟方法代码

  • 虚拟基方法代码执行
  • 重写的方法代码执行
  • 虚拟基方法代码执行
  • 我不确定我是否解释得很好,但我希望我的问题得到解释:)


    应该可以从方法中调用
    base.Execute()


    更多信息:

    应该可以从方法中调用
    base.Execute()

    更多信息:

    否,您需要以下信息:

    不,您要的是以下内容:


    Jon,这如何允许派生类在派生功能之前和之后调用基类方法?这不是OP要求的吗?@Jon,你的代码有问题。Converter.ExecuteImpl()永远不会命中ConverterBase.Execute()@Tomas:这并不意味着——其想法是公共调用方只调用
    Execute
    ,它将在基类中执行一些代码,然后在派生类中执行一些代码,然后在基类中执行最后一位代码。这不是你想要的吗?@Jamiec:我怀疑所需要的功能是让派生类提供一些行为,然后由基类中的功能包装。调用者只需调用
    Execute
    ,其余的人只需做正确的事情。@Jon我明白了。Jon,这是如何允许派生类在派生功能之前和之后调用基类方法的?这不是OP要求的吗?@Jon,你的代码有问题。Converter.ExecuteImpl()永远不会命中ConverterBase.Execute()@Tomas:这并不意味着——其想法是公共调用方只调用
    Execute
    ,它将在基类中执行一些代码,然后在派生类中执行一些代码,然后在基类中执行最后一位代码。这不是你想要的吗?@Jamiec:我怀疑所需要的功能是让派生类提供一些行为,然后由基类中的功能包装。调用者只需调用
    Execute
    ,其余的人只需做正确的事情。@Jon我明白了。从来没有用过这样的口吻,有点困惑。
    public abstract class ConverterBase
    {
            public virtual void Execute()
    {
    try
    {
     //1. Base class code    
    
    // 2. Execute overridden method code.
    
    }
    finally
    {
    //3. Base class code
    }
    }
    }
    
     public class Converter : ConverterBase
    {
            public override void Execute()
    {
    //2. code
    }
    }
    
    public abstract class ConverterBase
    {
        public void Execute()
        {
            try
            {
                // Stuff
                ExecuteImpl();
            }
            finally
            {
                // Stuff
            }
        }
    
        protected abstract void ExecuteImpl();
    }
    
    
    public class Converter : ConverterBase
    {
        protected override void ExecuteImpl()
        {
            // Stuff to execute within the parent's try block
        }
    }