VS里的 代碼片段(Code snippet)很有用,制作也很簡單


工欲善其事必先利其器,而 Visual Studio 就是我們的開發利器。

上一篇文章,介紹了一個很棒的快捷鍵,如果你還沒用過這個快捷鍵,看完之后應該會豁然開朗。如果你已經熟練的應用它,也會溫故而知新。

這篇文章,介紹一下 VS里的 代碼片段(Code snippet)。

1. 介紹

Code snippet 為可重用的代碼片段, 相信使用 VS 的開發者都會經常的使用內置的代碼片段,如 class、ctor、prop、if、else、switch、for、foreach、while、using 等。

它會定義一個代碼片段,並包含着幾個變量,有其默認值。我們可以通過tab鍵在這些變量之間跳動修改,最終修改為我們想要寫的代碼。

雖然使用這些基礎的代碼片段已經可以很舒服了,但或許我們還可以更舒服一些。

比如說我們寫代碼時總是會定義一些方法,需要寫很多的部分 如:訪問修飾符、返回值、方法名、參數、方法體大括號,等等。 步驟多且麻煩,還需要多次敲擊空格。如果使用自定制的代碼片段,就可以大大提升我們寫方法的效率。

而現在的方法多為異步方法,需要加async關鍵字,返回值需要是Task<T>類型,方法名稱一般用Async為后綴。我們可以再定制一個代碼片段來阻止這些重復。

不知道細心的讀者有沒有看到,還自動引用了 System.Threading.Tasks 這個命名空間呢?

而在我們實際的開發中,很多的代碼會有一些固定的結構,比如說倉儲,借用代碼片段可以快速寫一個 Service 接口。這里借用了 Blog.Core項目來演示。

2. 制作

在我們編碼的時候,任何會讓我們重復的代碼,都可以作為代碼片段抽取出來,而它的制作也非常簡單。只需4步,而前三步,也僅僅是准備工作,只需做一次就夠了。以后就可以專注於對代碼片段的增加修改與刪除。

1. 首先我們需要創建一個文件夾,來存放我們要定制的代碼片段。如:CodeSnippetsCSharp

2. 將此文件夾添加到  工具 > 代碼片段管理器中。快捷鍵為 [ctrl+k,b]

3. 如果是 VS 2019則需要重啟,VS2017 則不需要。其他版本沒有進行測試。

4. 開始制作 code snippet。

它的本質是一個 xml文件,只需要復制已有的代碼片段,然后進行部分修改,保存為.snippet文件到剛創建的文件夾 CodeSnippetsCSharp 之中,就可以直接在VS 之中使用了

以我寫的 methodAsync代碼片段為例:各個節點已經用注釋進行標注,其中***為重要的節點,而大部分節點是可選的,可有可無。可以直接復制下面的代碼,進行修改,作為代碼片段的模板。

 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>methodAsync</Title> <!-- 標題,必須的。-->
 6             <Shortcut>methodAsync</Shortcut> <!-- ***快捷鍵名稱,是在VS里輸入的,重要!-->
 7             <Description>Code snippet for an async method</Description><!-- 描述,可選,不重要 -->
 8             <Author>jinyafeng</Author> <!--作者,可選,不重要。 -->
 9             <SnippetTypes> <!--片段類型,可選,不重要。 -->
10                 <SnippetType>Expansion</SnippetType> <!--代表基本類型,代碼片段直接插入光標處,還有其他類型,如SurroundsWith,會把你選擇的代碼片段包進去,不好用不推薦。-->
11             </SnippetTypes>
12         </Header>
13         <Snippet>
14             <Declarations> <!--可以定義多個變量。-->
15                 <Literal> <!--單個變量的定義-->
16                     <ID>accessbility</ID> <!--***變量名稱,重要!-->
17                     <ToolTip>Accessbility</ToolTip> <!--提示,可選,不重要-->
18                     <Default>public</Default><!--默認的文本值,可選,但有用。-->
19                 </Literal>
20                 <Literal>
21                     <ID>return</ID>
22                     <ToolTip>Return Type</ToolTip>
23                     <Default>int</Default>
24                 </Literal>
25                 <Literal>
26                     <ID>method</ID>
27                     <ToolTip>Method name</ToolTip>
28                     <Default>MyMethod</Default>
29                 </Literal>
30                 <Literal>
31                     <ID>parameter</ID>
32                     <ToolTip>Parameter name</ToolTip>
33                     <Default></Default>
34                 </Literal>
35             </Declarations>
36             <!--***核心定義階段,其中 <![CDATA[]]> 是固定的格式。無需關心,真正關心的是里面的[]的內容,為變量+文本,而變量用雙$$表示。-->
37             <!-- Language 選擇對應的語言,目前支持 VB,CSharp,CPP,XAML,XML,JavaScript,TypeScript,SQL,HTML-->
38             <!--$end$ 是一個特殊變量,代表着按回車鍵 回到的地方,以繼續寫代碼。-->
39             <Code Language="csharp"><![CDATA[$accessbility$ async Task<$return$> $method$Async($parameter$)
40             {
41                 $end$
42             }
43         ]]>
44             </Code>
45             <Imports> <!--要導入的命名空間列表。可選。-->
46                 <Import> <!--單個命名空間導入定義,如果當前文件已經導入,則不會重新導入。-->
47                 <Namespace>System.Threading.Tasks</Namespace>
48                 </Import>
49             </Imports>
50         </Snippet>
51     </CodeSnippet>
52 </CodeSnippets>

 3. 最后

以上所有代碼片段均以放到了 github上,可以進行下載查看。https://github.com/jinyafeng/CustomCodeSnippetsCSharp

我們在日常的編碼過程中,習慣對重復的代碼進行封裝,然后各個地方重用。但對於編寫代碼本身,也是可以進行封裝與重用的,你有思考過嗎?


免責聲明!

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



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