10个鲜为人知的C#关键字
2010-09-30 21:05:59 来源:WEB开发网MSDN链接:http://msdn.microsoft.com/en-us/library/scekt9xw.aspx
default
在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:
T 是引用类型还是值类型。
如果 T 为值类型,则它是数值还是结构。
给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t = null 才有效;只有当 T 为数值类型而不是结构时,语句 t = 0 才能正常使用。解决方案是使用 default 关键字,此关键字对于引用类型会返回 null,对于数值类型会返回零。对于结构,此关键字将返回初始化为零或 null 的每个结构成员,具体取决于这些结构是值类型还是引用类型:
T temp = default(T);
MSDN链接:http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx
global
在 ::运算符前面使用的 global 上下文关键字引用全局命名空间,该命名空间是任何 C# 程序的默认命名空间,未以其他方式命名。
class TestClass : global::TestApp { }
MSDN链接:http://msdn.microsoft.com/en-us/library/cc713620.aspx
volatile
volatile 关键字表示字段可能被多个并发执行线程修改。声明为volatile 的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值。
MSDN链接:http://msdn.microsoft.com/en-us/library/x13ttww7%28VS.80%29.aspx
extern alias
有时可能有必要引用具有相同完全限定类型名的程序集的两个版本,例如当需要在同一应用程序中使用程序集的两个或更多的版本时。通过使用外部程序集别名,来自每个程序集的命名空间可以在由别名命名的根级别命名空间内包装,从而可在同一文件中使用。
若要引用两个具有相同完全限定类型名的程序集,必须在命令行上指定别名,如下所示:
/r:GridV1=grid.dll
/r:GridV2=grid20.dll
这将创建外部别名 GridV1 和 GridV2。若要从程序中使用这些别名,请使用 extern 关键字引用它们。例如:
extern alias GridV1;
extern alias GridV2;
每一个外部别名声明都引入一个额外的根级别命名空间,它与全局命名空间平行,而不是在全局命名空间内。因此,来自每个程序集的类型就可以通过各自的、根源于适当的名空间别名的完全限定名来引用,而不会产生多义性。
在上面的示例中,GridV1::Grid 是来自 grid.dll 的网格控件,而 GridV2::Grid 是来自 grid20.dll 的网格控件。
MSDN链接:http://msdn.microsoft.com/en-us/library/ms173212%28VS.80%29.aspx
原文链接:http://hatim.indexdev.net/2009/12/08/10-not-so-well-known-keywords-in-c/
更多精彩
赞助商链接