【问题标题】:Can i customize the code that is auto-generated for properties in VB.net我可以自定义为 VB.net 中的属性自动生成的代码吗
【发布时间】:2012-11-13 19:43:45
【问题描述】:

我通过更改某些类的接口实现顺序给自己挖了一个洞。就目前而言,我需要通过并扩展许多属性来实现 Get 和 Set。 Get 和 Set 方法非常相似,但非常棘手,难以实现自动化。示例:

Public Property SpecificTable as SpecificTableType

我有与此类似的属性,我需要将其扩展为:

Public Property SpecificTable as SpecificTableType
Get
  Return DirectCast(Me.Table, SpecificTableType)
End Get
Set(ByVal value as SpecificTableType)
  Me.Table = value
End Set

它非常简单,当我输入 Get 并在属性下按回车时,VS Studio 会自动生成很多,包括Set(ByVal value as SpecificTableType)

这让我想知道,除了 sn-ps,因为我已经定义了属性,VS 如何完成这个自动生成,我可以自定义它吗?它可以让我的手指少一些疼痛。

【问题讨论】:

  • 移除所有道具,重新生成所有道具?好简单。这行得通吗?
  • 我不这么认为。我有 300 多个具有相似属性但类型不同的文件。在这一点上,我正在浏览每一个,然后输入 Get,按 Enter,然后手动填写 get 和设置。
  • 不知道有没有一些聪明的宏对你有用?
  • 此代码只是文本文件中的文本。你是程序员!编写一个程序来读取文件,找到这些行,识别属性名称和类型,并为您生成代码 sn-ps 并重新保存文件。不需要是宏。
  • 我曾考虑过这一点,但实际情况并不像我最初描述的那样完美,某些文件中存在显着差异。其中一些已经足够老,可以明确定义属性,具有成员级变量,其中一些通过简单地在本地实现属性并忽略约束来实现接口。耶。解析中涉及的问题可能会抵消很多好处。

标签: .net vb.net visual-studio-2010


【解决方案1】:

默认情况下,Visual Studio 不允许您自定义代码生成的这方面,除了允许您禁用“结束构造”行(End If、End Get 等)的自动插入。

有一些扩展允许模板驱动代码生成,例如:http://visualstudiogallery.msdn.microsoft.com/4fbfd05a-f3e8-4f79-b912-def3e9cb28fc?SRC=VSIDE

看看这是否符合您的要求。

【讨论】:

  • 我想知道是不是这样。我曾希望通过他们的 sn-p/macro 支持,也许我可以自定义它。那好吧。我正在检查 CodeSmith 扩展。谢谢!
  • 确实很有趣,但最后,我认为它给我的不仅仅是 sn-ps。我的情况的问题是我需要根据已经写在代码中的属性来限制类型。本质上,VS 在自动创建 Set(ByVal value as ) 时所做的事情。感谢您的回答,看来我需要摆脱压力球了。
【解决方案2】:

这是一种困难的方法,但如果您想花时间学习 Roslyn 并编写代码问题,这绝对是一个答案。

使用 Microsoft Roslyn,这是一个编译器即服务项目,可让您访问解析器、编译器(语义)功能。你可以用 Roslyn 做的是创建一个基于 a 文件的抽象语法树(循环所有类型的文件),并为每个 AST 搜索不包含明确定义的 getter 和 setter 的属性,并将该 AST 替换为有你喜欢的道具。

如果我需要在简单的替换应用程序无法做到的地方重做此操作,我会这样做。

查看这些:http://msdn.microsoft.com/en-us/vstudio/hh500769.aspx http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2011-08-29
    • 2013-09-22
    相关资源
    最近更新 更多