VS2010中CodeSnippet【代碼段】應用與創建


內容概要:

  1. 什么是Code Snippet?它能為我們帶來什么?
  2. 如何使用Code Snippet?
  3. 分析Code Snippet文件【.snippet】
  4. 編寫一個實現屬性更改通知的Code Snippet

什么是Code Snippet?它能為我們帶來什么?

Code Snippet是預編寫的代碼片段,您可以隨時使用 Visual Studio 將這些代碼片段插入到您的應用程序中。這些代碼段減少了鍵入重復代碼或搜索示例所用的時間,從而提高了工作效率。可以使用代碼段 XML 架構創建自己的 Visual Basic、Visual C# 或 XML 代碼段,並將它們添加到 Visual Studio 已包含的代碼段中。【來自MSDN】

如何使用Code Snippet?

  1. 首先 ,新建一個控制台應用程序“CodeSnippetExample”
  2. 在Program類內部,Main方法外部敲入“prop”(property,“屬性”的縮寫)
  3. 在輸入完“prop”后,按下“tab”鍵,你就會發現代碼變成了這個樣子:

    其中,淺藍色背景標識着我們正在修改的代碼,可以通過按“tab”鍵來更改修改光標,如果這時按下“tab”鍵,代碼就會變成下面的樣子,這樣就可以修改“MyProperty”了。
  4. 現在,我們將屬性的類型修改為“String”,屬性名改為“NewProperty”。
  5. 然后,鍵入回車鍵,退出代碼段模式,這樣,一個簡寫的屬性就完成了。

這個只是一個簡單的例子,同樣的,你還可以使用propfull來實現具有字段的屬性,比如下面的:

到現在,可以很明顯的看出,如果我們能很好的利用CodeSnippet的話,編寫代碼的速度將會有很大的提升,比如,我會使用CodeSnippet來幫我編寫通知屬性,從而少去了大量手工代碼的編寫:

在VS中內置了很多現成的CodeSnippet模板,可以通過VS-工具-代碼段管理器來查看這些CodeSnippet。

分析Code Snippet文件【.snippet】

在代碼段管理器中,把“語言”選項調整為“Visual C#”,展開下面的Visual C#節點,就會看到下面的東西:

下面,把“位置”下面的地址復制到“資源管理器”的地址欄,按回車,並且找到“prop.snippet”,雙擊它,默認會被VS打開,下面給出代碼:

 <CodeSnippet Format="1.0.0">
  <Header>
   <Title>prop</Title>
   <Shortcut>prop</Shortcut>
   <Description>自動實現的屬性的代碼段
語言版本: C# 3.0 或更高版本</Description>
   <Author>Microsoft Corporation</Author>
   <SnippetTypes>
    <SnippetType>Expansion</SnippetType>
   </SnippetTypes>
  </Header>
  <Snippet>
   <Declarations>
    <Literal>
     <ID>type</ID>
     <ToolTip>屬性類型</ToolTip>
     <Default>int</Default>
    </Literal>
    <Literal>
     <ID>property</ID>
     <ToolTip>屬性名</ToolTip>
     <Default>MyProperty</Default>
    </Literal>
   </Declarations>
   <Code Language="csharp"><![CDATA[public $type$ $property$ { get; set; }$end$]]>
   </Code>
  </Snippet>
 </CodeSnippet>
</CodeSnippets>

很明顯的,這是一個XML格式的文件,其根節點CodeSnippets下有一個CodeSnippet節點,代表一個CodeSnippet代碼段。在CodeSnippet節點下面,有兩個節點,Header和Snippet。

先分析Header。在Header下有下面幾個標簽:Title,Shortcut,Description,Author,SnippetTypes。前4個標簽都很好理解,分別是:標題,快捷命令,描述,作者。難理解的是最后一個:SnippetTypes。

SnippetTypes,指定 Visual Studio 如何將代碼段插入到代碼中。SnippetTypes 元素中可能有零個或多個 SnippetType 元素。 <?XML:NAMESPACE PREFIX = [default] http://msdn2.microsoft.com/mtps NS = "http://msdn2.microsoft.com/mtps" /?> 如果 SnippetTypes 元素不存在,則代碼段可以插入到代碼中的任何位置。 其子節點只能為SnippetType,且SnippetType只能有兩種值:SurroundsWith(允許將此代碼段放置在一段選定的代碼周圍)、Expansion(允許將代碼段插入到光標處。 )。這個不是很理解。。。

下面,開始分析Snippet。在Snippet下面有兩個標簽Declarations(聲明),Code。

Declarations:指定構成代碼段可編輯部分的文本和對象。

在Declarations標簽內部的Literal定義代碼段的可編輯文本。Literal元素用於標識完全包含在代碼段中的代碼片段替換,不過這些代碼片段在插入到代碼中后,可能需要進行自定義。 例如,字符串、數值和一些變量名都應聲明為文本。(這個是MSDN中的解釋,說白了就是定義我們在使用CodeSnippet時可以編輯的幾個部分,想象成模板替換符也可以)

在Literal標簽下,有三個標簽,ID(必選的,用於模板替換時的標識符),ToolTip(可選的,提示文本),Default(必選的,指定插入代碼段時文本的默認值。也就是模板替換符的默認值)。

結束了”定義部分“,我們就要組織模板了。開始分析Code標簽。

Code標簽中的內容很簡單,使用XML屬性標識了使用的語言是csharp,其內部的數據標簽,就是一個代碼模板,這里便用上了上面定義的Declarations,用法很簡單,在ID前后加$符號就可以。

【PS】分析的不好,大家見諒。。。

編寫一個實現屬性更改通知的Code Snippet

在WPF程序中,有很多程序員樂於使用MVVM模式,於是,在寫ViewMode時,編寫具體有通知功能的屬性就成了這部分程序員必須做的事情,他們寫出的代碼大概就是這樣:

    public class ViewModel : NotificationObject
    {
        private String userName;
        public String UserName
        {
            get { return userName; }
            set { userName = value; this.RaisePropertyChanged("UserName"); }
        }
    }

仔細觀察,發現這段代碼中聲明UserName屬性的代碼,其代碼和使用propfull生成的代碼很相似,只不過是在set訪問器中多了一句this.RaisePropertyChanged("UserName"); 而已。現在,開始讓代碼簡化起來。。。

首先,找到propfull的CodeSnippet文件,復制到桌面。:C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\Visual C#\propfull.snippet

修改Title,Shortcut,Description。。。。propNotification,propno,具有通知功能的屬性。

接着,在Code標簽中找到set訪問器的代碼,在其原有語句的分號后面加上這句話:“this.RaisePropertyChanged("$property$");”。

這樣,一個實現通知同能屬性的CodeSnippet就寫好了。然后把這個文件保存,重命名為propn.snippet 復制到C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\Visual C#\目錄,重啟VS,試試看,是不是成功了?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM