C# Tips Written By Andrew Troelsen

來源:互聯網
上載者:User

作者介紹:Andrew Troelsen是微軟的C# MVP,同時是Intertech Training技術培訓部的副總裁及合作者。這是我在Duncan Mackenzie的部落格上看到的,感覺很有意思,所以翻譯了幾篇。原文可以查看:http://blogs.msdn.com/csharpfaq/category/7580.aspx

1、通過Windows Form處理Win32訊息

在非託管世界裡,擷取儲存在訊息佇列的Win32訊息時很常見的。如果你希望在託管的Windows Form應用程式中處理Win32訊息,那麼就顯得有些鳳毛麟角了。首先,你應該建立一個協助類實現IMessageFilter介面。該介面提供一個單獨的方法PreFilterMessage()方法,獲得其內部的訊息ID,也就是原始的WPARAM和LPARAM資料。一個簡單例子:

public class MyMessageFilter : IMessageFilter {  public bool PreFilterMessage(ref Message m)   {    // Intercept the left mouse button down message.    if (m.Msg == 513)     {      MessageBox.Show("WM_LBUTTONDOWN is: " + m.Msg);      return true;    }    return false;  }}

此時,你必須使用Application類型註冊你的協助類:

public class mainForm : System.Windows.Forms.Form{  private MyMessageFilter msgFliter = new MyMessageFilter();  public mainForm()  {    // Register message filter.    Application.AddMessageFilter(msgFliter);  }…}

此時,在訊息擷取Event Handler之前,你自訂的Filter會自動生效。要移去該Filter,可以使用Application的靜態方法Application.RemoveMessageFilter() 。

2、留意References/‘Using’/Manifest之間的關係

如果.Net平台支援類型的二度重用的話,使用Visual Studio.Net的“Add Reference”對話方塊將引用添加到外部程式集就很常見了。很多程式員(尤其是C/C++語言家族的程式員)會非常“害怕”添加不必要的外部參考,因為這樣會造成“代碼膨脹”。實則大謬不然。當你添加引用程式集或使用“using”關鍵字時,csc.exe會忽略你代碼中並沒有真正使用的所有程式集。因此,當你在如下代碼中添加System.Data.dll和System.Windows.Forms.dll 引用:

using System;using System.Data;  // Ignored. using System.Windows.Forms; // Ignored. public class MyClass{  public static void Main()  {    Console.WriteLine("Hi there.");  }}

編譯器只會引用mscorlib.dll。

就象你認識到的那樣,當你通過ildasm.exe開啟.NET程式集時,雙擊MANIFEST表徵圖,會快顯視窗顯示擷取的IL資訊。在最上方,你可以看到當前編譯的程式集中實際用到的外部程式集資訊列表:

.assembly extern mscorlib{ … }

[註:Assembly.GetReferencedAssemblies()方法獲得的引用程式集就不包括未被使用的程式集資訊。]

至少,你不需要浪費時間去移除那些應用程式中沒用的using語句和程式集引用了。C#編譯器已經自動為你做好這些了。

3、編輯原始碼時啟用“全螢幕模式”

是的,我得承認這是個“蹩腳”的建議,它似乎看起來並無價值。然而這卻是我最喜歡的Visual Studio.NET中的一個特色(如之前的Visual Studio版本),不過很多人卻忽略了。你可以在“View”菜單下找到“Full Screen”功能表項目。啟用該選項後,當前菜單只顯示當前啟用的文檔。這對那些喜歡介面清爽的人們來說很有協助,因為在IDE中有太多的視窗布局,這使得你的代碼視窗“局促不安”。要退出全螢幕模式,點擊代碼視窗上的“Full Screen”按鈕即可。

4、將自訂程式集添加到“Add Reference”對話方塊中

你已經知道,Visual Studio.NET的“Add Reference”對話方塊並不會顯示機器內的所有程式集,因為它並沒有直接映射到全域組件快取(GAC),自然也不會顯示自訂程式集。作為該限制的彌補,你可以通過“Browse”按鈕查看這些.Dll程式集。

然而,如果你希望Visual Studio.NET的“Add Reference”對話方塊顯示你的自訂程式集,你必須將這些組件檔複製到PublicAssemblies檔案夾中,該檔案夾位於C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE中。一旦你這樣做了,看看吧,你所自訂的.Dll程式集都會自動顯示出來了。

5、使用“using”避免類型名衝突

你已經知道在一個*.cs檔案中,可以使用using關鍵字為編譯器指向一個完整的類型名。然而,你可能不知道使用using關鍵字還可以建立別名(有助於避免命名衝突)。假定你有兩個命名空間定義:

namespace My2DShapes{  public class Hexagon{} }namespace My3DShapes{  public class Hexagon{} }

現在假定你要在下面的應用程式中建立一個3D Hexagon執行個體:

using My2DShapes;using My3DShapes;public class MyApp{  public static void Main()  {    // Error!  Which Hexagon?    Hexagon h = new Hexagon();      }}

通過建立別名很容易避免如上出現的命名衝突:

using My2DShapes;using The3DHex = My3DShapes.Hexagon;public class MyApp{  public static void Main()  {    // This really creates a new My3DShapes.Hexagon.    The3DHex h = new The3DHex();      }}

其他幾個tip都很簡單了,例如通過tab鍵,可以直接獲得要實現介面的stub code,還有獲得委託的簽名。這些小技巧,雖然不能為你設計程式帶來多大的用處,但至少可以讓你省不少事。多看看這些,也還是有收穫的啊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.