Como: criar uma classe C# usando o objeto CodeModel
O CodeModel2 a hierarquia de objeto tem um conjunto completo de métodos para gerar código automaticamente.Embora geralmente você pode digitar o código manualmente, há situações em que você talvez queira automatizar algumas do processo.Automação permite que você:
Aplica as convenções de nomenclatura.
Aplicar padrões de documentação.
Crie projetos padronizados.
Este procedimento pressupõe que você saiba como criar um projeto do suplemento.Para obter mais informações, consulte A criação de suplementos e assistentes.
A classe no procedimento a seguir será estar contida em um novo arquivo de origem.Posteriormente, um método é adicionado à classe.
Observação |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram desenvolvidos com o General Development Settings ativo.Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu.Para obter mais informações, consulte Configurações de Visual Studio. |
Para adicionar um novo arquivo de origem ao projeto
Criar um Visual Studio projeto de suplemento usando Visual C#.
Sobre o projeto menu, clique em Add Reference, clique no .NET guia, selecione VSLangProj, VSLangProj2 e VSLangProj80 e clique em OK.
Adicione a seguinte chamada de método para o OnConnection método.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Call the AddClass method. AddAClass(_applicationObject); }
Adicionar o AddAClass método diretamente abaixo do OnConnection método.
public void AddAClass(DTE2 dte) { }
Adicione o seguinte código para o AddAClass método para adicionar um arquivo de código novo e vazio ao projeto.
O modelo CodeFile é instalado com o Visual Studio e podem ser localizados por meio de GetProjectItemTemplate método.O método aceita dois parâmetros, os modelos de idioma que você está pesquisando e o nome do arquivo para o item resultante do projeto.O item de projeto é criado usando o AddFromTemplate método.
O código, proj = soln.Projects.Item(1);, necessita que um Visual C# solução é aberta no Visual Studio o ambiente de desenvolvimento integrado (IDE) antes de executar este exemplo.
Project proj; String csItemTemplatePath; Solution2 soln; soln = (Solution2)_applicationObject.Solution; // Open a C# solution in the Visual Studio IDE // before running this add-in. proj = soln.Projects.Item(1); ProjectItem pi; csItemTemplatePath = soln.GetProjectItemTemplate("CodeFile", "CSharp"); proj.ProjectItems.AddFromTemplate(csItemTemplatePath, "MyFile.cs"); pi = proj.ProjectItems.Item("MyFile.cs");
Para adicionar um namespace para o arquivo de origem
Adicione o seguinte código para adicionar um namespace para o arquivo de origem.
O FileCodeModel propriedade contém uma referência para o FileCodeModel2 objeto que representa todos os elementos de código no arquivo.O FileCodeModel2 objeto fornece vários métodos para adicionar elementos de código para o arquivo de origem.O AddNamespace método retorna um CodeNamespace objeto.Você o usará CodeNamespace reference para adicionar uma definição de classe no código-fonte.
FileCodeModel2 fcm = (FileCodeModel2)pi.FileCodeModel; CodeNamespace games;
Para adicionar a classe para o namespace
Use o AddClass método para adicionar um Chess de classe para o Games espaço para nome.O AddClass método retorna uma referência a um CodeClass instância, que pode ser usada para adicionar propriedades e métodos da classe.
games = fcm.AddNamespace("Games", -1); CodeClass2 chess;
Para definir um método
Use o AddFunction método para adicionar um Move método para o Chess classe.O primeiro argumento para o método Especifica o nome da função criada.O segundo argumento determina o tipo de função criada, porque os operadores e construtores também são adicionados usando o AddFunction método.O terceiro argumento especifica o tipo de retorno da função e é substituído exatamente na assinatura do método.
if (games != null) { // Add a class to the namespace. chess = (CodeClass2)games.AddClass("Chess", -1, null, null, vsCMAccess.vsCMAccessDefault); // Add a method with a parameter to the class. CodeFunction2 move; move = (CodeFunction2)chess.AddFunction("Move", vsCMFunction.vsCMFunctionFunction, "int", -1, vsCMAccess.vsCMAccessDefault, null); move.AddParameter("IsOK", "bool", -1); }
O arquivo de origem produzido por esses procedimentos é mostrado abaixo.
namespace Games { class Chess { int Move(bool IsOK) { return default(int); } } }
O código de add-in é mostrado abaixo.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Call the AddClass method. AddAClass(_applicationObject); } public void AddAClass(DTE2 dte) { Project proj; String csItemTemplatePath; Solution2 soln; soln = (Solution2)_applicationObject.Solution; // Open a C# solution in the Visual Studio IDE // before running this add-in. proj = soln.Projects.Item(1); ProjectItem pi; csItemTemplatePath = soln.GetProjectItemTemplate("CodeFile", "CSharp"); proj.ProjectItems.AddFromTemplate(csItemTemplatePath, "MyFile.cs"); pi = proj.ProjectItems.Item("MyFile.cs"); FileCodeModel2 fcm = (FileCodeModel2)pi.FileCodeModel; CodeNamespace games; try { // Add a namespace. games = fcm.AddNamespace("Games", -1); CodeClass2 chess; if (games != null) { // Add a class to the namespace. chess = (CodeClass2)games.AddClass("Chess", -1, null, null, vsCMAccess.vsCMAccessDefault); // Add a method with a parameter to the class. CodeFunction2 move; move = (CodeFunction2)chess.AddFunction("Move", vsCMFunction.vsCMFunctionFunction, "int", -1, vsCMAccess.vsCMAccessDefault, null); move.AddParameter("IsOK", "bool", -1); } } catch (Exception ex) { MessageBox.Show("Failed to add a code model element, because " + ex.Message); } }
Public Sub OnConnection(ByVal application As Object, _ ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _ ByRef custom As Array) Implements IDTExtensibility2.OnConnection _applicationObject = CType(application, DTE2) _addInInstance = CType(addInInst, AddIn) AddAClass(_applicationObject) End Sub Public Sub AddAClass(ByVal dte As DTE2) Dim proj As Project Dim csItemTemplatePath As String Dim soln As Solution2 soln = CType(_applicationObject.Solution, Solution2) ' Open a C# solution in the Visual Studio IDE before ' running this add-in. proj = soln.Projects.Item(1) Dim pi As ProjectItem csItemTemplatePath = soln.GetProjectItemTemplate("CodeFile", "CSharp") proj.ProjectItems.AddFromTemplate(csItemTemplatePath, "MyFile34.cs") pi = proj.ProjectItems.Item("MyFile34.cs") Dim fcm As FileCodeModel2 = CType(pi.FileCodeModel, FileCodeModel2) Dim games As CodeNamespace Try ' Add a namespace. games = fcm.AddNamespace("Games") Dim chess As CodeClass2 If Not games Is Nothing Then ' Add a class to the namespace. chess = CType(games.AddClass("Chess"), CodeClass2) ' Add a method with a parameter to the class. Dim move As CodeFunction2 move = CType(chess.AddFunction("Move", vsCMFunction.vsCMFunctionFunction, _ "int"), CodeFunction2) move.AddParameter("IsOK", "bool") End If Catch e As Exception MsgBox("Failed to add a code model element, because " & _ e.ToString()) End Try End Sub
Substitua o código na classe OnConnection com o código do exemplo acima.Para obter informações adicionais sobre como executar esse exemplo, consulte Como: Add-Ins de controle, usando o Gerenciador de suplemento.
Consulte também
Tarefas
Como: usar o objeto CodeModel para analisar o código de Visual Basic
Conceitos
Visão geral do objeto CodeModel para Visual Basic e C# aplicativos
Descobrindo o código usando o modelo de código (Visual Basic)