Jak: vytvoření třídy C# pomocí objektu CodeModel
CodeModel2 Hierarchie objektů má úplnou sadu metod pro automatické generování kódu.Zatímco by obecně zadejte kód ručně, existují situace, kde můžete automatizovat proces některé.Automatizace umožňuje:
Vynuťte konvence.
Vynuťte standardy dokumentace.
Vytvořte standardizovaný projektů.
Tento postup předpokládá, že víte, jak vytvořit projekt přidat.Další informace naleznete v tématu Vytváření doplňků a průvodců.
Třídy v následujícím postupu budou obsaženy v nový zdrojový soubor.Metoda je později do třídy.
[!POZNÁMKA]
Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Tyto postupy byly vyvinuty s aktivní Obecné nastavení pro vývoj.Chcete-li změnit nastavení, zvolte Import and Export Settings v menu Nástroje.Další informace naleznete v tématu Nastavení aplikace Visual Studio.
Přidat nový soubor zdroje do projektu
Vytvoření Visual Studio projektu přidat pomocí Visual C#.
Na projektu nabídky, klepněte na tlačítko Přidat odkaz na, klepněte .NET karta, VSLangProj, VSLangProj2 a VSLangProj80 a na OK.
Přidat následující způsob volání OnConnection metoda.
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); }
Přidat AddAClass metody přímo OnConnection metoda.
public void AddAClass(DTE2 dte) { }
Přidejte následující kód AddAClass metoda přidat kód nový, prázdný soubor do projektu.
CodeFile šablona nainstalována s Visual Studio a pomocí lze nalézt GetProjectItemTemplate metoda.Metoda přebírá dva parametry, jazyk šablony, které hledáte a název souboru pro výsledné položky projektu.Položku projektu je vytvořeno AddFromTemplate metoda.
Kód, proj = soln.Projects.Item(1);, vyžaduje, Visual C# řešení je otevřen v Visual Studio integrované vývojové prostředí (IDE) před spuštěním tohoto příkladu.
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");
Přidání oboru názvů zdrojový soubor
Přidejte následující kód přidání oboru názvů zdrojový soubor.
FileCodeModel Vlastnost obsahuje odkaz FileCodeModel2 objekt představující prvky kódu v souboru.FileCodeModel2 Objekt poskytuje několik metod pro přidání prvky kódu do zdrojového souboru.Metoda AddNamespace vrací objekt CodeNamespace.Budete používat CodeNamespace odkaz na definici třídy přidat do zdrojového kódu.
FileCodeModel2 fcm = (FileCodeModel2)pi.FileCodeModel; CodeNamespace games;
Přidat třídy do oboru názvů
Použití AddClass metody přidání Chess do třídy Games oboru názvů.AddClass Metoda vrátí odkaz na CodeClass instance, které můžete použít k přidání vlastnosti a metody třídy.
games = fcm.AddNamespace("Games", -1); CodeClass2 chess;
Definovat metodu
Použití AddFunction metoda přidat Move metodu Chess třídy.První argument k metodě Určuje název vytvořené funkce.Druhý argument určuje typ vytvořené funkce, protože provozovatelů a konstruktory také přidat pomocí AddFunction metoda.Třetí argument určuje návratový typ funkce a nahrazena přesně podpis metody.
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); }
Zdrojový soubor, který vyrábí tyto postupy jsou uvedeny níže.
namespace Games { class Chess { int Move(bool IsOK) { return default(int); } } }
Doplněk kódu je uvedena níže.
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
Výše uvedený příklad kódu nahraďte kód ve třídě OnConnection.Další informace o tom, jak spustit příklad viz Postup: ovládání doplňky pomocí Správce doplňků.
Viz také
Úkoly
Jak: CodeModel objekt použít k analýze kódu Visual Basic
Koncepty
Přehled objektu CodeModel jazyka Visual Basic a C# aplikací