C# Tips Written By Andrew Troelsen

作者介绍: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,还有获得委托的签名。这些小技巧,虽然不能为你设计程序带来多大的用处,但至少可以让你省不少事。多看看这些,也还是有收获的啊。

你可能感兴趣的:(C# Tips Written By Andrew Troelsen)