【问题标题】:Change default code snippet in overridden method更改覆盖方法中的默认代码段
【发布时间】:2011-06-27 12:54:51
【问题描述】:

请帮帮我!我可以以某种方式自定义默认显示在重写方法主体中的自动生成的代码 sn-p 吗?

默认情况下被覆盖的方法看起来像

public override void Method(int A, object B)
{
    base.Method(A, B);
}

我想用我自己的替换默认代码 sn-p,例如

public override void Method(int A, object B)
{
    if (A > 0)
    {
        // some code..
    }
    else
    {
        // some code..
    }
}

编辑

我有基类

public class BaseClass
{
   public int Result {get;set;}

   // This method depends on result
   protected virtual void Method() {}
}

有很多类是从 BaseClass 派生的。他们都必须以相同的方式处理 Method() 中的 Result 属性。所以,我想放置一些代码,展示如何使用它。 根据我的想法,当我在智能感知列表中键入“覆盖”并选择“方法()”时,我得到以下代码:

public class DerivedClass: BaseClass
{
    public override void Method()
    {
        // u have to check result property
        if(result > 0)
        {
            // if result is positive do some logic
        }
    }
}

代替默认代码sn-p

public class DerivedClass: BaseClass
{
    public override void Method()
    {
        base.Method();
    }
}

终于

在这种情况下使用Template Method 模式是个好主意。

感谢大家分享你的想法!

【问题讨论】:

  • 不,我想插入我自己的自定义代码而不是默认的 sn-p,可以吗?
  • 什么是自动生成?

标签: c# visual-studio overriding code-snippets


【解决方案1】:

在 Visual Studio 的 Code Snippets Manager 中,您可以修改 MethodOverrideStub.snippet

在 sn-p 中使用参数的地方获得您想要的那种行为可能会很棘手 - 我目前正在研究这一点,但没有明显的飞跃。

不过,只用一些模板区域插入 if/else 应该不会太难。

【讨论】:

  • 事实上,我需要为一种特定的方法自定义覆盖的代码 sn-p。我希望任何时候有人重写此方法时,他都可以看到一种“示例代码”。此代码不依赖于输入参数,它就像“硬编码”。我将尝试详细描述它。请看我的帖子。
  • @garek 我不喜欢你只为一种方法改变覆盖行为的运气(尽管今晚我会做更多的挖掘,看看我是否能找到一种方法)什么可能最适合您将创建一个新的扩展 sn-p 来插入您想要的代码。当覆盖类型为允许快速创建方法存根时,它不会为您提供智能感知。
【解决方案2】:

好吧,依靠代码 sn-p 让人们正确编写您的方法并不是一个好主意。如果您希望该方法始终具有该结构,则最好使用Template Method pattern:

public abstract class BaseClass
{
    // this method forces that structure upon the subclasses
    public void Foo()
    {
        if(result > 0)
        {
            DoFoo();
        }
    }
    // this is the method that subclasses override
    protected abstract void DoFoo();
}

public class DerivedClass : BaseClass
{
    public override DoFoo()
    {
        // now you write the code here
    }
}

【讨论】:

  • 感谢您的建议,马蒂尼奥费尔南德斯!在我的案例中使用模板方法模式是一个非常好的选择!
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多