使用Visual Studio 2005 IDE的宏,自动为c#变量生成属性

本文介绍了如何利用Visual Studio 2005 IDE的宏功能,为C#类中的变量自动创建对应的属性,以此简化DTO类的编写工作。通过编写宏脚本,可以避免手动重复创建属性,提高开发效率。
摘要由CSDN通过智能技术生成

在编写c#代码过程中,我们经常需要做一些重复枯燥的工作。例如,编写DTO(数据访问对象),通常就是为一个类定义一系列的变量和属性。

有一些第三方的IDE辅助工具,可以为我们生成一些代码,减少工作量。例如,Assist X就是一款很值得推荐的工具,使用其提供的Encapsulate Field功能,可以很方便地将一个类地编写封装为属性。

我今天需要介绍的如何使用Visual Studio 2005 IDE中自带的宏实现类似的功能。

打开Visual Studio 2005 IDE,选择“工具” > "宏" > “宏 IDE”,选择“添加模块”。例如,我是在MyMacros项目中新增了一个EditorHelper模块,代码如下:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public  Module EditorHelper
    
' 为一个参数封装一般属性访问器
     Public   Sub  EncapsulateField()
        
Dim  projectItem  As  ProjectItem  =  DTE.ActiveDocument.ProjectItem
        
Dim  fileCodeModel  As  FileCodeModel  =  projectItem.FileCodeModel

        
' 得到当前选定的内容
         Dim  selectText  As  TextSelection  =  DTE.ActiveDocument.Selection
        
' 获取到当前光标的位置
         Dim  point  As  TextPoint  =  selectText.ActivePoint

        Try
            
Dim  codeElement  As  CodeElement  =  fileCodeModel.CodeElementFromPoint(point, vsCMElement.vsCMElementVariable)

            
If  (codeElement  Is   Nothing Then
                Return
            
End   If

            Debug.Assert(codeElement.Kind 
=  vsCMElement.vsCMElementVariable)

            
Dim  codeVar  As  CodeVariable  =  CType(codeElement, CodeVariable)
            
Dim  fieldName  As   String   =  codeVar.Name
            
Dim  codeClass  As  CodeClass  =  CType(codeVar.Parent, CodeClass)

            AddPropertyToClass(codeClass, fieldName, codeVar.Type)
        Catch ex 
As  Exception
            
' 吃掉异常,不做处理或者提示
         End  Try

    
End Sub

    
Public   Sub  EncapsulateAllFields()
        
Dim  projectItem  As  ProjectItem  =  DTE.ActiveDocument.ProjectItem
        
Dim  fileCodeModel  As  FileCodeModel  =  projectItem.FileCodeModel

        Try
            
' 得到当前选定的内容
             Dim  selectText  As  TextSelection  =  DTE.ActiveDocument.Selection
            
' 获取到当前光标的位置
             Dim  point  As  TextPoint  =  selectText.ActivePoint

            
Dim  codeElement  As  CodeElement  =  fileCodeModel.CodeElementFromPoint(point, vsCMElement.vsCMElementClass)
            
Dim  codeClass  As  CodeClass  =  CType(codeElement, CodeClass)

            
Dim  i  As   Integer
            
For  i  =   1   To  codeClass.Members.Count
                
' 如果属性已经定义,会抛出异常
                 ' 在这里处理异常,即使新增的属性已经定义,也可以继续处理下面的代码
                Try
                    
Dim  element  As  CodeElement  =  codeClass.Members.Item(i)
                    
If  (element.Kind  =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值