Visual Studio 中的Code Snippet(代碼片段)功能介紹


1、Code Snippet(代碼片段)功能介紹

平常我們在使用Visual Studio 進行開發時,可以看到Intellisense提示如下內容

 

這種就是代碼片段的提示。如輸入cw后,按兩次Tab鍵,即可輸入Console.WriteLine();

代碼片段是小塊可重用代碼,可通過右鍵單擊菜單(關聯菜單)命令或熱鍵組合插入到代碼文件中。 

 

2、Visual Studio 中預置的代碼片段(C#)

代碼片段 功能 可用位置
#if 創建 #if 指令和 #endif 指令。 任何位置。
#region 創建 #region 指令和 #endregion 指令。 任何位置。
~ 創建包含類的終結期(析構函數)。 在類中。
attribute 為派生自 Attribute 的類創建聲明。 在命名空間(包括全局命名空間)、類或結構中。
checked 創建 checked 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
class 創建類聲明。 在命名空間(包括全局命名空間)、類或結構中。
ctor 創建包含類的構造函數。 在類中。
cw 創建對 WriteLine 的調用。 在方法、索引器、屬性訪問器或事件訪問器內。
do 創建 do while 循環。 在方法、索引器、屬性訪問器或事件訪問器內。
else 創建 else 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
enum 創建枚舉聲明。 在命名空間(包括全局命名空間)、類或結構中。
equal 創建一個方法聲明,該聲明對 Object 類中定義的 Equals 方法進行重寫。 在類或結構中。
exception 為某個從異常(默認情況下為 Exception)派生的類創建聲明。 在命名空間(包括全局命名空間)、類或結構中。
for 創建 for 循環。 在方法、索引器、屬性訪問器或事件訪問器內。
foreach 創建 foreach 循環。 在方法、索引器、屬性訪問器或事件訪問器內。
forr 創建 for 循環,每次迭代后會減少循環變量。 在方法、索引器、屬性訪問器或事件訪問器內。
if 創建 if 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
indexer 創建索引器聲明。 在類或結構中。
interface 創建接口聲明。 在命名空間(包括全局命名空間)、類或結構中。
invoke 創建安全調用事件的塊。 在方法、索引器、屬性訪問器或事件訪問器內。
iterator 創建迭代器。 在類或結構中。
iterindex 使用嵌套類創建“已命名”迭代器和索引器對。 在類或結構中。
lock 創建 lock 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
mbox 創建對 System.Windows.Forms.MessageBox.Show 的調用。 可能還需要添加對 System.Windows.Forms.dll 的引用 。 在方法、索引器、屬性訪問器或事件訪問器內。
namespace 創建命名空間聲明。 在命名空間(包括全局命名空間)中。
prop 創建自動實現的屬性聲明。 在類或結構中。
propfull 創建具有 get 和 set 訪問器的屬性聲明。 在類或結構中。
propg 創建具有專用 set 訪問器的只讀自動實現的屬性 在類或結構中。
sim 創建 static int Main 方法聲明。 在類或結構中。
struct 創建結構聲明。 在命名空間(包括全局命名空間)、類或結構中。
svm 創建 static void Main 方法聲明。 在類或結構中。
switch 創建 switch 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
try 創建 try-catch 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
tryf 創建 try-finally 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
unchecked 創建 unchecked 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
unsafe 創建 unsafe 塊。 在方法、索引器、屬性訪問器或事件訪問器內。
using 創建 using 指令。 在命名空間(包括全局命名空間)中。
while 創建 while 循環。 在方法、索引器、屬性訪問器或事件訪問器內。

 

3、創建代碼片段

創建代碼片段的基本格式如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
 3     <CodeSnippet Format="1.0.0">
 4         <Header>
 5             <Title></Title>
 6           <Shortcut></Shortcut>
 7           <Description></Description>
 8           <Author></Author>
 9         </Header>
10         <Snippet>
11             <Code Language="">
12                 <![CDATA[]]>
13             </Code>
14         </Snippet>
15     </CodeSnippet>
16 </CodeSnippets>

 

這里我們創建一個輸入當前時間的代碼片段,簡寫為 dt

使用Visual Studio 創建一個XML文檔,內容如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2  <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
 3      <CodeSnippet Format="1.0.0">
 4          <Header>
 5             <Title>dt</Title>
 6            <Shortcut>dt</Shortcut>
 7            <Description>DateTime.Now的代碼片段</Description>
 8            <Author>zhaotianff</Author>
 9          </Header>
10          <Snippet>
11             <Declarations>
12                 <Literal>
13                     <ID>expression</ID>
14                     <ToolTip>日期類型</ToolTip>
15                     <Function>SimpleTypeName(global::System.DateTime)</Function>
16                 </Literal>
17                 <Literal>
18                     <ID>dt</ID>
19                     <ToolTip>變量名</ToolTip>
20                     <Default>dt</Default>
21                 </Literal>
22             </Declarations>
23             <Code Language="csharp"><![CDATA[var $dt$ = $expression$.Now;$end$]]>
24             </Code>
25         </Snippet>
26      </CodeSnippet>
27  </CodeSnippets>

 

格式說明:

 

Header:用於指定有關 IntelliSense 代碼段的常規信息

Title:代碼段的友好名稱

Shortcut:快捷輸入文本,這里用的是 dt

Description:描述。這會顯示在Visual Studio的提示上,在后面的截圖可以看到

Author:作者

 

Snippet :指定代碼片段的引用、導入、聲明以及代碼內容

Declarations:聲明字面量或對象

Literal:定義可以編輯的代碼段的文本(字面量)

 

ID :指定字面量的唯一標識符(這個元素是必需的)

Default :指定插入代碼段時字面量的默認值(這個元素是必需的)

Function :元素 指定當文本在 Visual Studio 中獲得焦點時要執行的函數

ToolTip :元素 用於描述文本的預期值和用法

 

最關鍵的就是Code元素,在這里定義代碼片段中的代碼內容。

Code元素有兩個保留的關鍵字:$end$ $selected$

$end$ 標記在插入代碼段之后用於放置光標的位置。

$selected$ 表示在文檔中選擇的要在調用時插入代碼段的文本(如果定義了字面量,會直接選擇字面量,當按下回車后,會跳到$selected$的位置)

 

Code元素支持三種屬性

Language:用於標識當前的代碼片段用於哪種編程語言,可選項(VB、CSharp、CPP、XAML、XML、JavaScrip、TypeScript、SQL、HTML)(這個選項是必需的)

Kind:用於標識 代碼片段可以用於哪個位置。(這個屬性是可選的)

method body(用於方法內部)、method decl (用於方法定義)、type decl (用於類型定義)、file (完整的代碼定義,可用於任何位置)、any(任何位置)

$:分隔符,可以描述字面量或對象

 

示例代碼說明

在示例代碼中定義了兩個字面量

 1 <Literal>
 2     <ID>expression</ID>
 3     <ToolTip>日期類型</ToolTip>
 4     <Function>SimpleTypeName(global::System.DateTime)</Function>
 5 </Literal>
 6 <Literal>
 7      <ID>dt</ID>
 8      <ToolTip>變量名</ToolTip>
 9      <Default>dt</Default>
10 </Literal>

第一個使用了Function元素,代表這里會執行System.DateTime

第二個是一個可選輸入,使用了Default元素來標識默認值

 

1 <Code Language="csharp"><![CDATA[var $dt$ = $expression$.Now;$end$]]>

Code元素中,指定語言為CSharp,在<![CDATA[...]]>中輸入代碼片段 var $dt$ = $expression$.Now;$end$

$dt$是前面定義的字面量,按下Tab鍵后,會自動選中該值

$expression$是前面定義的字面量,代表System.DateTime

$end$代表代碼片段結束后,光標所在的位置 

 

這里我們再對照VS內置的if代碼片段來進行說明,定義如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
 3     <CodeSnippet Format="1.0.0">
 4         <Header>
 5             <Title>if</Title>
 6             <Shortcut>if</Shortcut>
 7             <Description>if 語句的代碼片段</Description>
 8             <Author>Microsoft Corporation</Author>
 9             <SnippetTypes>
10                 <SnippetType>Expansion</SnippetType>
11                 <SnippetType>SurroundsWith</SnippetType>
12             </SnippetTypes>
13         </Header>
14         <Snippet>
15             <Declarations>
16                 <Literal>
17                     <ID>expression</ID>
18                     <ToolTip>要計算的表達式</ToolTip>
19                     <Default>true</Default>
20                 </Literal>
21             </Declarations>
22             <Code Language="csharp"><![CDATA[if ($expression$)
23     {
24         $selected$ $end$
25     }]]>
26             </Code>
27         </Snippet>
28     </CodeSnippet>
29 </CodeSnippets>

當輸入if代碼片段后,可以看到如下:

定義的字面量$expression$會被選中,修改后,按下回車,會跳到$selected$的位置。

這里還有一個元素,在上面的介紹中沒有涉及到。

那就是Header元素下的SnippetType元素,該元素用於指定 Visual Studio 如何插入代碼段。如果未指定,剛代表可以在任何位置插入。

SnippetType元素可以重復使用。可選值如下:

SurroundsWith允許將代碼段放置在一段選定的代碼周圍。

Expansion允許將代碼段插入到光標處。

Refactoring指定在 C# 重構過程中使用代碼片段。 不能在自定義代碼段中使用 Refactoring

 

 

4、管理代碼片段

在工具菜單下,選擇【代碼片段管理器】項,可以打開代碼片段管理器。

 

在這里可以管理已有的代碼片段,也可以添加新的代碼片段。

 

保存上面示例代碼為dt.snippet文件

打開代碼片段管理,點擊添加,選擇剛剛保存的dt.snippet文件

由於使用了 Language="csharp" 來標識 ,所以會自動放到CSharp類別下,並且會自動鈎選 【My Code Snippets】文件夾。

 

5、使用導入的代碼片段

輸入 dt ,可以看到Visual Studio的提示。

按兩下Tab鍵,即可以快速輸入

1 var dt = DateTime.Now;

 


免責聲明!

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



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