VB.NET创建重写函数时能否自定义默认自动补全代码片段?
自定义VB.NET抽象类重写方法的IDE自动生成代码
问题场景
创建包含多个成员的MustInherit抽象基类后,当派生类未实现对应抽象成员时,Visual Studio IDE会给出快速修复选项,自动生成默认重写代码:
Public Overrides Sub Function_A() Throw New NotImplementedException() End Sub
需要自定义该重写方法的内部默认内容,让触发自动补全时直接填充预设代码段,预期生成效果如下:
Public Overrides Sub Function_A() Dim a As String = "Test" Dim b As Integer = 123 End Sub
该需求用于配套制作包含多组可重写函数的类模板,替换原生默认抛出未实现异常的自动补全逻辑。
可行实现方式
- 自定义Roslyn代码修复提供器
这是唯一能完全替换原生快速操作行为的方案。Visual Studio内置的抽象类实现逻辑基于Roslyn编写,没有开放直接修改默认生成内容的配置入口,你可以自行编写Roslyn Code Fix扩展,拦截/替换默认的"实现抽象类"修复逻辑:当检测到当前类继承你的目标抽象基类、存在未实现的抽象/可重写成员时,按照你的预设规则生成带自定义方法体的重写代码。该方案可以打包为VSIX扩展分发,所有使用你类模板的开发者安装后就能获得和原生体验一致的自定义补全效果。 - 自定义代码片段(Code Snippet)
如果不需要对接原生的错误提示快速修复入口,可以为每个可重写方法制作独立的自定义代码片段,配置好触发快捷键。使用时输入触发词按两次Tab就能直接插入带预设内容的重写方法,开发成本远低于Roslyn扩展,缺点是不会在类未实现抽象成员时自动出现在修复建议列表里。 - 模板向导绑定
如果你的类模板是通过Visual Studio自定义项/项目模板分发,可以在模板中配套IWizard向导逻辑,在用户通过模板新建派生类文件时,自动生成带预设方法体的重写代码。该方案仅对通过模板新建的文件生效,后续手动新增的重写方法无法触发自定义内容填充。
注意:不存在无代码的系统配置项可以直接修改内置抽象类实现的默认方法体,默认抛出
NotImplementedException的逻辑是硬编码在Roslyn内置修复提供器中的,必须通过上述扩展方式实现自定义。
内容的提问来源于stack exchange,提问作者BWS
相关产品推荐
相关产品推荐

