当前位置:跳过导航链接计算机毕业设计首页 : 技术应用 : 详细内容

VS2005创建宏代码

来源:转载 作者:管理员 添加时间:2011-08-19 点击数:3272

如果你正处于Visual Studio 2005的一个C#工程上下文中,那么一定会存在一个重构菜单。而在VB.NET工程上下文中,是不存在这样的菜单的(至少到目前发行的beta 2版本中是如此)。然而,你能容易地为VB.NET仿效这种支持的行为-例如通过书写一个轻量级的代码生成器来实现封装字段(或其它重构)。
为了实现封装字段,自动化下列步骤:
1. 选择一个字段,不需要一个一致的属性方法。
2. 把字段的存取修饰词改成private。
3. 稍微改变一下该字段名以避免属性冲突(使用任何你喜欢的习惯)。
4. 生成getter/setter属性方法以及一些代码已提供对该字段的存取。
提示:开始用宏进行工作的一个好办法是打开宏记录器,完成一项任务,进而分析在集成开发环境中生成了哪些宏语句。然后,再进一步归纳录制下的宏。
Visual Studio对象模型支持所有这些能力,甚至还有更重要的能力。列表1展示封装字段的一个实现。〖资料来源:计算机毕业论文 www.xiaoniu168.com
列表1:利用VS 2005中的宏能力来把创建的字段封装成一个代码生成器:

Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Public Class Refactoring
Public Shared Sub EncapsulateField()
 Dim projectItem As ProjectItem = DTE.ActiveDocument.ProjectItem
 Dim fileCodeModel As FileCodeModel = projectItem.FileCodeModel
 ’ 得到当前的选定内容
 Dim selection As TextSelection = DTE.ActiveDocument.Selection
 ’得到当前的光标位置
 Dim point As TextPoint = selection.ActivePoint
 ’尽量读取当前位置作为一个代码元素
 Dim codeElement As CodeElement = fileCodeModel.CodeElementFromPoint( _
 point, vsCMElement.vsCMElementVariable)
If (codeElement Is Nothing) Then
MsgBox("Place mouse cursor on field before running this macro.", MsgBoxStyle.Exclamation)
 Return
End If
 Debug.Assert(codeElement.Kind = vsCMElement.vsCMElementVariable)
 ’我们测试过了,所以知道这是个变量
 Dim codeVariable As CodeVariable = CType(codeElement, CodeVariable)
 Dim fieldName As String = codeVariable.Name
 Dim fieldType As String = codeVariable.Type.AsString
 ’重命名该字段,以使不发生属性冲突问题
 codeVariable.Name = "F" & fieldName
 ’确保字段是private
 codeVariable.Access = vsCMAccess.vsCMAccessPrivate
 ’得到变量的parent
 Dim codeClass As CodeClass = CType(codeVariable.Parent, CodeClass)
 ’添加一个新属性
 Dim codeProperty As CodeProperty = codeClass.AddProperty("dummy", "dummy", fieldType, codeElement)
 codeProperty.Name = fieldName
 ’实现getter
 Dim getter As EditPoint = codeProperty.Getter.GetStartPoint( vsCMPart.vsCMPartBody).CreateEditPoint
 getter.LineDown()
 getter.Indent(, 3)
 getter.Insert("Return " + codeVariable.Name)
 ’实现setter
 Dim setter As EditPoint = codeProperty.Setter.GetStartPoint( _
 vsCMPart.vsCMPartBody).CreateEditPoint
 setter.LineDown()
 setter.Indent(, 3)
 setter.Insert(codeVariable.Name + " = Value")
End Sub
End Class

第1页第2页

【联系方式】

【本站信誉】

用心做计算机毕业设计论文网