本文主要:如何制作Visual Studio 代码段,代码段作用,和如何使用。
我们有时候会打出很多重复的代码,只是结构一样。
例如属性
/// <summary>
/// 编码
/// </summary>
public Encoding encoding
{
set
{
_encoding = value;
}
get
{
return _encoding;
}
}
private Encoding _encoding=Encoding.UTF8;
属性我们可以使用
prop 和按两次tab输入
如果需要带字段,那么可以使用propfull
,请看下面
private string myVar;
public string MyProperty
{
get { return myVar; }
set { myVar = value; }
}
但很多时候我们需要使用通知OnPropertyChanged
,这时在 VisualStudio 就没有写好的,如果是写属性,这样每个都来增加一句OnPropertyChanged工作量重复很多。
在之前,我就知道了有代码段,但是实在复杂,好在最近时间多,仔细看了一下。
代码片段是小块可重用的代码,可使用上下文菜单命令或热键组合将其插入代码文件中。 代码片段通常包含常用的代码块(如 try-finally 或 if-else 块),可用于插入整个类或方法。
代码段使用很简单,在类中,如果我们需要输入try-catch,我们可以按
try tab tab
try
{
}
catch (Exception)
{
throw;
}
如果是 VisualStudio 可以使用
Ctrl+K 和 X 或 Ctrl+K 和 S
visual studio 有的代码参见:https://msdn.microsoft.com/zh-cn/library/z41h7fat.aspx
创建代码段可以使用snippet editor
但是这个是比较旧
我们可以使用创建模板
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title></Title>
</Header>
<Snippet>
<Code Language="">
<![CDATA[]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
我们可以在visual studio创建xml文件写,这样比较容易
如果使用笔记本,必须编码为utf-8
,开始我弄成ascii就错了
让我来告诉大家,代码的格式,代码段最先是CodeSnippets
CodeSnippets说明: xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"
然后就是他的格式,只需要复制下面的代码
<CodeSnippet Format="1.0.0">
下来Header
,里面有标题、作者、描述、快捷键信息。标题是必填
<Title>标题</Title>
作者可以选,描述可以选
<Author>lindexi_gd</Author>
<Description>描述</Description>
快捷键不是按下同时键,是输入一段代码就可以按tab的文字
<Shortcut>ps</Shortcut>
代码段核心是<Snippet>
里面有<Declarations>
描述,code
<Declarations>
可以写每个参数的描述
例如do代码就是这样写
<Declarations>
<Literal>
<ID>expression</ID>
<ToolTip>要计算的表达式</ToolTip>
<Default>true</Default>
</Literal>
</Declarations>
ID
写在![CDATA[
使用变量名,<ToolTip>
描述,<Default>
默认值
代码写在![CDATA[
,需要先写语言Language="csharp"
告诉代码在什么语言使用。下面的例子是 do ,因为他的代码很少
<Code Language="csharp"><![CDATA[do
{
$selected$ $end$
} while ($expression$);]]>
</Code>
在上面代码可以看到存在两个$
的,这就是参数,下面来告诉大家,什么是参数
模板参数:
模板参数声明和启用用两个$$
把变量名写在$parameter$
在![CDATA[
可以使用$parameter$
变量
有一些变量名不能使用,具体有哪些,请看https://msdn.microsoft.com/zh-cn/library/eehb4faa.aspx
写完了代码之后就需要导入。
导入代码段方法
我们可以把之前写的代码导入到代码段,这里使用的是 ps tab
我们可以使用$selected$
和$end$
来定位代码光标的开始
在code可以加上Delimiter
Delimiter 可选特性。指定用于描述代码中的文本和对象的分隔符。默认情况下,分隔符为 $。
kind 代码段必须插入位置,方法,类中,请看https://msdn.microsoft.com/zh-cn/library/ms171418.aspx
下面是一些常用的代码,直接复制就可以使用
ps
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>ps</Title>
<Author>lindexi</Author>
<Description>插入属性</Description>
<HelpUrl />
<SnippetTypes />
<Keywords />
<Shortcut>ps</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>string</ID>
<Default>string</Default>
<ToolTip>类型名</ToolTip>
</Literal>
<Literal>
<ID>name</ID>
<Default>name</Default>
<ToolTip>属性名</ToolTip>
</Literal>
</Declarations>
<Code Language="csharp" kind="method decl"><![CDATA[public $string$ $name$
{
set
{
_$name$=value;
}
get
{
return _$name$;
}
}
$slected$ $end$
private $string$ _$name$;]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
pvs
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>pvs</Title>
<Author>lindexi</Author>
<Description>插入属性</Description>
<HelpUrl />
<SnippetTypes />
<Keywords />
<Shortcut>pvs</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>string</ID>
<Default>string</Default>
<ToolTip>类型名</ToolTip>
</Literal>
<Literal>
<ID>name</ID>
<Default>name</Default>
<ToolTip>属性名</ToolTip>
</Literal>
</Declarations>
<Code Language="csharp" kind="method decl"><![CDATA[public $string$ $name$
{
set
{
_$name$=value;
OnPropertyChanged("$name$");
}
get
{
return _$name$;
}
}
$slected$ $end$
private $string$ _$name$;]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>cla</Title>
<Author>lindexi</Author>
<Description></Description>
<Shortcut>cla</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>name</ID>
<Default>name</Default>
<ToolTip></ToolTip>
</Literal>
</Declarations>
<Code Language="csharp" kind="method decl"><![CDATA[
/// <summary>
///
/// </summary>
public class $name$
{
public $name$()
{
}
$slected$ $end$
}
]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
如果需要使用Resharper的代码段,请看resharper 自定义代码片
本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/%E4%BB%A3%E7%A0%81%E6%AE%B5.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。