五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一文說(shuō)清C#的快捷鍵

2021-06-01 15:43 作者:新閣教育  | 我要投稿



-Begin-


最近公眾號(hào)涌入了一批初學(xué)C#的PLC工程師們,有很多人想知道C#有哪些快捷鍵。今天這篇文章不僅告訴你有哪些快捷鍵,還會(huì)告訴你怎么做自己的快捷鍵。


每個(gè)C#初學(xué)者都應(yīng)該經(jīng)歷過(guò)這樣的情形:一次偶然的機(jī)會(huì),看到別人只輸入prop,然后就快速地寫出了完整的屬性代碼,感到很神奇。然后,我們厚著臉皮問(wèn)別人,別人會(huì)告訴你,輸入prop,接著連續(xù)按兩個(gè)Tab,就可以實(shí)現(xiàn),你嘗試了,發(fā)現(xiàn)確實(shí)好用。


在后面的學(xué)習(xí)過(guò)程中,我們慢慢發(fā)現(xiàn)for、foreach、switch也都有類似的功能。

然后,可能你就會(huì)想,究竟有多少這種快捷語(yǔ)法呢?

你可能也只是想想而已,沒有太去深究,直到遇到了我們,今天咱們就把這個(gè)事兒弄明白。


一、揭開面紗

我們打開Visual Studio,創(chuàng)建一個(gè)簡(jiǎn)單的控制臺(tái)項(xiàng)目,然后在菜單欄中的工具中,找到代碼片段管理器,語(yǔ)言我們選擇CSharp,然后選擇Visual C#,我們看到了這些東西:

我們似乎有點(diǎn)明白了,這些快捷代碼有個(gè)專業(yè)術(shù)語(yǔ)叫做代碼片段,英文名稱CodeSnippet。我們看到了我們熟悉的prop、propfull、switch,也看到了一些我們不太熟悉的面孔:ctor、propg、iterindex、interator,總共大概有40個(gè)左右,下面我們對(duì)一些目前開發(fā)中,常用的CodeSnippet做一下說(shuō)明:

1、#region:代碼折疊器

????#region?MyRegion

????#endregion

2、ctor:構(gòu)造方法

?public?Program?()
?{

?}

3、class:類

????class?MyClass
????{

????}

4、cw:控制臺(tái)輸出

?Console.WriteLine();

5、do:do-while循環(huán)

????do
????{

????}?while?(true);

6、for:for循環(huán)

????for?(int?i?=?0;?i?<?length;?i++)
????{

????}

7、foreach:foreach循環(huán)

?foreach?(var?item?in?collection)
????{

????}

8、forr:for逆循環(huán)

?for?(int?i?=?length?-?1;?i?>=?0;?i--)
?{

?}

9、lock:鎖

?lock?(this)
?{

?}

10、mbox:messagebox.show

?System.Windows.Forms.MessageBox.Show("Test");

11、prop:簡(jiǎn)化屬性

?public?int?MyProperty?{?get;?set;?}

12、propfull:完整屬性

?private?int?myVar;

?public?int?MyProperty
?{
??get?{?return?myVar;?}
??set?{?myVar?=?value;?}
?}

13、switch:switch-case

?switch?(switch_on)
?{
??default:
?}

14、try:異常捕獲

?try
?{

?}
?catch?(Exception)
?{

??throw;
?}

15、tryf:帶finally的異常捕獲

?try
?{

?}
?finally
?{

?}

16、using:using

?using?(resource)
?{

?}

17、while:while循環(huán)

?while?(true)
?{

?}


二、探索原理

我們繼續(xù)研究,看下Code Snippet是怎么實(shí)現(xiàn)的。

其實(shí)Code Snippet只是一個(gè) 文件,只不過(guò)包含了一些只有 Visual Studio 才認(rèn)識(shí)的元素,這些元素就定義了如何去替我們補(bǔ)全代碼,我們?nèi)匀煌ㄟ^(guò)菜單欄中的工具中,找到代碼片段管理器,語(yǔ)言我們選擇CSharp,然后選擇Visual C#,在上面的這個(gè)圖中,我們看到了位置這一欄,它指向的是一個(gè)文件路徑。

1、我們打開這個(gè)文件對(duì)應(yīng)的文件夾,發(fā)現(xiàn)其實(shí)每個(gè)快捷代碼都對(duì)應(yīng)一個(gè)文件。

2、我們打開一個(gè)比較熟悉的for循環(huán)對(duì)應(yīng)的文件——for.snippet,默認(rèn)會(huì)用Visual Studio打開,我們可以看到使用的是xml文件的格式,全部展開如下圖所示:

3、整個(gè)snippet文件由2個(gè)節(jié)點(diǎn)組成,分別是Header和Snippet,其中Header主要是一個(gè)聲明;Snippet包含具體代碼的形式和內(nèi)容。

4、Header部分主要包含標(biāo)題、快捷鍵、說(shuō)明、作者和Snippet類型相關(guān)信息。

Snippet類型分為?Expansion、SurroundsWith?及?Refactoring(只能在重構(gòu)過(guò)程中使用)。

Expansion:允許將代碼段插入到光標(biāo)處。

SurroundsWith:允許將此代碼段放置在一段選定的代碼周圍。比如我們寫完一段代碼后,發(fā)現(xiàn)忘記加 try...catch... 了,這個(gè)時(shí)候可以選中需要包裹在 try...catch... 中的代碼,然后調(diào)用 Code Snippet。

5、Snippet部分是重點(diǎn)內(nèi)容,從結(jié)構(gòu)上來(lái)看,主要包括Declarations和Code兩個(gè)部分,Declarations,顧名思義就是聲明變量,而Code就是核心代碼,Code中會(huì)應(yīng)用到Declarations中聲明的一些變量。這個(gè)有點(diǎn)像早期西門子S7-300PLC的SCL語(yǔ)言,需要先定義變量,然后后面才能用。


三、擴(kuò)展練習(xí)一

當(dāng)我們已經(jīng)知道Snippet的原理之后,我們就可以制作自己的Code Snippet了。

大家可能發(fā)現(xiàn)了,自帶的關(guān)于異常捕獲的有try和tryf兩個(gè),但是這兩個(gè)都無(wú)法表示try-catch-finally的邏輯,所以,我們可以先做一個(gè)try-catch-finally的Code Snippet。

1、建議還是使用復(fù)制-修改的方式來(lái)做,我們從Snippets路徑中將try.snippet文件拷貝到桌面上,然后修改如下:


2、修改好之后,直接保存并重命名為trycf.snippet

3、復(fù)制該文件到Snippets路徑中4、測(cè)試結(jié)果:在代碼編輯器中 CTRL+KL+S,就可以呼出 snippet,我們可以看到有trycf了。


四、擴(kuò)展練習(xí)二

我們?cè)趯?shí)際開發(fā)中,如果發(fā)現(xiàn)有代碼是經(jīng)常要寫的,我們不希望每次都從頭去寫,那就可以使用Snippet,這里以串口通信庫(kù)為例:

????public?class?SerialBase
????{?
?????#region?對(duì)象或?qū)傩?br>????????///?<summary>
????????///?定義SerialPort對(duì)象
????????///?</summary>
????????private?SerialPort?MyCom;
????????///?<summary>
????????///?讀取超時(shí)時(shí)間
????????///?</summary>
????????public?int?ReadTimeOut?{?get;?set;?}?=?2000;
????????///?<summary>
????????///?寫入超時(shí)時(shí)間
????????///?</summary>
????????public?int?WriteTimeOut?{?get;?set;?}?=?2000;
????????private?bool?dtrEnable;
????????///?<summary>
????????///?Dtr使能標(biāo)志
????????///?</summary>
????????public?bool?DtrEnable
????????{
????????????get?{?return?dtrEnable;?}
????????????set
????????????{
????????????????this.MyCom.DtrEnable?=?value;
????????????????dtrEnable?=?value;
????????????}
????????}
????????private?bool?rtsEnable;
????????///?<summary>
????????///?Rts使能標(biāo)志
????????///?</summary>
????????public?bool?RtsEnable
????????{
????????????get?{?return?rtsEnable;?}
????????????set
????????????{
????????????????this.MyCom.RtsEnable?=?value;
????????????????rtsEnable?=?value;
????????????}
????????}
????????#endregion
????????#region?打開關(guān)閉串口
????????///?<summary>
????????///?打開串口
????????///?</summary>
????????///?<param?name="iBaudRate">波特率</param>
????????///?<param?name="iPortName">串口號(hào)</param>
????????///?<param?name="iDataBits">數(shù)據(jù)位</param>
????????///?<param?name="iParity">校驗(yàn)位</param>
????????///?<param?name="iStopBits">停止位</param>????
????????///?<returns>是否成功</returns>
????????public?bool?Connect(int?iBaudRate,?string?iPortName,?int?iDataBits,?Parity?iParity,?StopBits?iStopBits)
????????{
????????????//串口通信對(duì)象實(shí)例化
????????????MyCom?=?new?SerialPort(iPortName,?iBaudRate,?iParity,?iDataBits,?iStopBits);
????????????//如果當(dāng)前串口是打開的,先關(guān)閉一下
????????????if?(MyCom.IsOpen)
????????????{
????????????????MyCom.Close();
????????????}
????????????//設(shè)置超時(shí)時(shí)間
????????????MyCom.ReadTimeout?=?this.ReadTimeOut;
????????????MyCom.WriteTimeout?=?this.WriteTimeOut;
????????????try
????????????{
????????????????//打開串口
????????????????MyCom.Open();
????????????}
????????????catch?(Exception)
????????????{
????????????????return?false;
????????????}
????????????return?true;
????????}
????????///?<summary>
????????///?關(guān)閉串口
????????///?</summary>
????????public?void?DisConnect()
????????{
????????????if?(MyCom.IsOpen)
????????????{
????????????????MyCom.Close();
????????????}
????????}
????????#endregion
?}

1、對(duì)于串口通信來(lái)說(shuō),我們可能每次都要編寫這些代碼,那么我們能不能把這些代碼封裝成一個(gè)Snippet呢?

2、建議仍然采用復(fù)制-修改的方式來(lái)做,我們從Snippets路徑中將tryf.snippet文件拷貝到桌面上,然后修改如下:

3、重命名為serial.snippet,并復(fù)制到Snippets文件夾中。

4、測(cè)試結(jié)果如下:

-END-


后臺(tái)回復(fù)『軟件』『文章』,可以獲取更多軟件和相關(guān)原創(chuàng)技術(shù)文章。

我們開通了視頻號(hào),里面有很多上位機(jī)開發(fā)常用技能和案例分享,歡迎關(guān)注我的視頻號(hào)。


一文說(shuō)清C#的快捷鍵的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
马龙县| 旅游| 江华| 辽源市| 金山区| 新蔡县| 太保市| 鹤山市| 瑞安市| 且末县| 夏河县| 镇赉县| 西吉县| 柘城县| 临澧县| 天气| 明溪县| 巴林右旗| 孟津县| 鹤山市| 日喀则市| 兴国县| 玉环县| 安化县| 平阳县| 咸阳市| 轮台县| 宜良县| 黑水县| 绥化市| 贺兰县| 商洛市| 汪清县| 磐安县| 内黄县| 新蔡县| 霞浦县| 靖宇县| 勃利县| 通城县| 文登市|