How to: 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 Criando Adicionar-.
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 Trabalhando com configurações. |
Para adicionar um novo arquivo de origem para o projeto.
Criar um Visual Studio projeto usando o Add-in Visual C#.
Sobre o projeto menu, clique em Add Reference, clique o .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 para o 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 no arquivo de origem. O AddNamespace método retorna um CodeNamespace objeto. Você usará esse CodeNamespace reference para adicionar uma definição de classe para o código de origem.
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 namespace. O AddClass método retorna uma referência a um CodeClass instância, que você pode usar para adicionar propriedades e métodos para a 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 do 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 um desses 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: controle de Adicionar-</c0>.
Consulte também
Tarefas
How to: Use o objeto CodeModel para analisar o Códigodo 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)
Descobrindo o Código usando o modelo de Código (Visual TRANSLATION FROM VPE FOR CSHARP)