作为此编译器错误纠正的必然结果,C# 编译器将不再允许显式创建生成属性的获取和设置函数(如果将属性定义为接口实现的结果)。在下面的示例中,2003 版的 C# 编译器不再允许在 Derived 类中显式实现 IMyInterface.get_Prop 和 IMyInterface.set_Prop 方法: interface IMyInterface { public int Prop { get; set; } } public class Derived : IMyInterface { public int Prop { get { } set { } } // 非法 public int IMyInterface.get_Prop() { } // 非法 public void IMyInterface.set_Prop(int val) { } } 其他改变 C# 编译器的早期版本允许不兼容地使用属性。2003 版的 C# 编译器已经纠正了这些用法,因此更符合 ECMA 规范。首先是对 C# 编译器进行了纠正,不允许在其参数列表中使用未在属性类声明中声明为 public 的命名参数。例如,如果某个 AuthorAttribute 类是使用名为 authorName 的私有字段创建的,则下面的语句在 C# 编译器的早期版本中是允许的,但在 C# 2003 编译器中却会导致错误: [Author(authorName="microsoftuser")] public class MyClass { } 第二,ObsoleteAttribute 现在可以应用到运算符,这样程序员就可以使重载的运算符函数失效。最后,编译器以前对于无法识别的属性位置常常生成一个错误,而现在则根据 ECMA C# 规范的要求只生成一个警告。 另外,C# 编译器以前接受用户定义的移位运算符参数(<< 和 >>),而根据 ECMA C# 规范,这些参数是无效的。例如,移位运算符以前可以按以下方式进行声明,即将封装类的类型声明为第二个操作数: public class MyClass { public static MyClass operator <<(int I, MyClass c) { } public static void Main() { } } |
正在阅读:Visual C# .NET 2003语言的改变Visual C# .NET 2003语言的改变
2009-03-12 23:34
出处:PConline
责任编辑:ycx
键盘也能翻页,试试“← →”键