C#2.0的一些新特性
2007-08-11 23:53
267 查看
属性和索引可见性
C#2.0允许为属性或索引器的get和set访问器设置不同的可见性。例如,在通常情况下,可能想将 get 访问器公开为 public,而把 set 访问器公开为 protected。为此,可以为 set 关键字添加 protected 可见性限定符。类似地,可以将索引器的 set 方法定义为 protected。
例如在PetShop4.0中就存在大量的静态类。
C# 2.0 编译器不允许您将一个非静态成员添加到一个静态类中,也不允许您创建此静态类的实例,就好像它是一个抽象类一样。此外,您不能从一个静态类派生子类。这就如同编译器在静态类定义中加入了 abstract 和 sealed 一样。注意,可以定义静态类而不能定义静态结构,并且可以添加静态构造函数。
按上面的语句运行会提示错误 “TestApp.System”并不包含“Console”的定义
改成global::System.Console.WriteLine(number);
显然,并不推荐创建自己的名为 System 的命名空间,您不可能遇到出现此情况的任何代码。但是,在较大的项目中,很有可能在一个窗体或其他窗体中出现命名空间重复。在这种情况下,全局命名空间限定符可保证您可以指定根命名空间。
在上面例中,命名空间 System 用于包括类 TestClass,因此必须使用 global::System.Console 来引用 System.Console 类,该类被 System 命名空间隐藏。而且,别名 colAlias 用于引用命名空间 System.Collections;因此,将使用此别名而不是命名空间来创建 System.Collections.Hashtable 的实例。
在生产代码中通常并不鼓励禁止警告。禁止警告只是为了进行某些分析,比如,当您尝试隔离一个问题时,或者当您设计代码并且想要得到代码合适的初始结构而不必先行对其加以完善时。而在所有其他的情况下,都要避免取消编译器警告。注意,您不能通过编程的方式来重写项目设置,这意味着您不能使用 pragma 警告指令来恢复全局取消的警告。
本文参考http://www.microsoft.com/china/msdn/library/langtool/vcsharp/CreElegCodAnymMeth.mspx?mfr=true
C#2.0允许为属性或索引器的get和set访问器设置不同的可见性。例如,在通常情况下,可能想将 get 访问器公开为 public,而把 set 访问器公开为 protected。为此,可以为 set 关键字添加 protected 可见性限定符。类似地,可以将索引器的 set 方法定义为 protected。
如
public string this[int index] { get { return m_Names[index]; } protected set { m_Names[index] = value; } string[] m_Names = { "0","1","2","3","4"}; } |
静态类
有些类只有静态方法或静态成员(静态类),这是非常常见的。在这种情况下,实例化这些类的对象没有意义。例如在PetShop4.0中就存在大量的静态类。
C# 2.0 编译器不允许您将一个非静态成员添加到一个静态类中,也不允许您创建此静态类的实例,就好像它是一个抽象类一样。此外,您不能从一个静态类派生子类。这就如同编译器在静态类定义中加入了 abstract 和 sealed 一样。注意,可以定义静态类而不能定义静态结构,并且可以添加静态构造函数。
全局命名空间限定符
很可能有这样一个嵌套的命名空间,它的名称与一些其他的全局命名空间相匹配。在这种情况下,编译器在解析命名空间引用时会出现问题。请考虑下例:
class TestApp { public class System { } const int Console = 7; const int number = 66; static void Main1() { System.Console.WriteLine(number); } } |
改成global::System.Console.WriteLine(number);
显然,并不推荐创建自己的名为 System 的命名空间,您不可能遇到出现此情况的任何代码。但是,在较大的项目中,很有可能在一个窗体或其他窗体中出现命名空间重复。在这种情况下,全局命名空间限定符可保证您可以指定根命名空间。
using colAlias = System.Collections; namespace System { class TestClass { static void Main() { // Searching the alias: colAlias::Hashtable test = new colAlias::Hashtable(); // Add items to the table. test.Add("A", "1"); test.Add("B", "2"); test.Add("C", "3"); foreach (string name in test.Keys) { // Seaching the gloabal namespace: global::System.Console.WriteLine(name + " " + test[name]); } } } |
内联警告
C# 1.1 允许使用项目设置或者通过向编译器发布命令行参数来禁止特殊的编译器警告。其中的问题在于,这是一个全局取消,因此这样做会取消一些您仍然需要的警告。C# 2.0 允许使用 #pragma 警告指令显式地取消和恢复编译器警告:#pragma warning disable 169 public class MyClass { int m_Number; } #pragma warning restore 169 |
本文参考http://www.microsoft.com/china/msdn/library/langtool/vcsharp/CreElegCodAnymMeth.mspx?mfr=true
相关文章推荐
- 体验C#2.0的新特性
- 重新过一遍ASP.NET 2.0(C#)(4) - Cache&SqlCacheDependency(缓存和SqlCacheDependency特性)(转帖)
- C#中的自定义控件中的属性、事件及一些相关特性的总结(转)
- C# 4.0的一些新特性
- 实例 C#3.0与C#2.0相比之新特性(四) Lambda 表达式
- C#一些实用的,容易被遗忘的特性,经验和技巧
- C#2.0新特性
- [查漏补缺]C#中一些常用的面向对象的特性
- 【第一章】C#的进化史——C#1.0,2.0,3.0区别比较(二)——C#2.0,3.0 简化排序的特性
- C# 2.0新特性与C# 3.5新特性[转]
- C# 4.0的一些新特性_1547
- C# 2.0 特性介绍
- C#2.0的新特性
- C#2.0新特性CHM版下载
- C# DotNet 2.0及3.0 新特性
- C#2.0新特性之泛型与迭代器
- C#2.0新特性探究之模拟泛型和内置算法
- asp.net 2.0教程 C# 2.0新特性 泛型
- C# 4.0的一些新特性
- 为什么在VS2010中编写.net 2.0程序可以调用C#2.0以上版本特性?