C# 2.0 杂项技术,以及C#语言的未来发展

简介:

属性访问器保护级别的变化

C# 2.0 允许我们对一个属性的get和set访问器使用不同的访问级别修饰符:

class Customer
{
   private string name;
   ...
   public string Name
   {
      get{return this.name;}
      internal set(this.name=value;}
   }
   ...
}

一些注意点

属性访问器(get或set)上应用的访问修饰符必须“小于”属性上应用的访问修饰符;“小于”的意思即“更严格”,例如protected小于public。

只能在一个属性访问器(get或set)上指定比属性上的访问修饰符“更小”的访问修饰符。

对于接口中属性的声明,不能给属性访问器(get或set)指定任何访问修饰符,只能默认为public。

属性访问器保护级别的变化规则完全适用于C#的索引器。

---------------------------------------------

名称空间别名限定符的引入

C# 2.0 允许我们使命名空间别名限定符(::)来避免不同命名空间中类型名称冲突的问题:

using SC = System.Collections;
using ZC = Zhucheng.Collections;
class Program
{
   static void main()
   {
       ZC::ArrayList list = new ZC::ArrayList();
       ...
   }
}

一些注意点

当使用命名空间别名限定符(::)时,如果ZC:ArrayList,编译器可以确保这是一个只适用于“名称空间别名”的限制符,不会辨析为其他类型、或者成员限定符(.)。

关键字global可以放在命名空间别名限定符(::)的左边,它使得编译器只去搜索那些所有的命名空间,而不会去搜索其他的类型、或成员。

尽可能地使用命名空间别名限定符(::),而减少使用点号(.)这样的通配限定符。

---------------------------------------------

pragma指示符的引入

C# 2.0 允许我们使用命名空间别名限定符(::)来避免不同命名空间中类型名称冲突的问题:

class program
{
   [Obsolete]
   static void Foo(){...}
   static void Main()
   {
      #pragma warning disable 612
      Foo();
      #pragma warning restore 612
   }
}

几个注意点

目前pragma指示符只支持#pragma warning

#pragma warning disable 可以禁止掉任何编译器警告信息。

#pragma warning restore 可以恢复被disable掉的任何编译器警告信息。

可以在disable和restore后面跟上具体的警告代码号,从而来禁止或者恢复特定的警告信息。

#prama是一个编译预处理功能,不影响任何代码运行机制。

---------------------------------------------

Conditional特性类的引入

C# 2.0 允许我们使用Conditional特性类来告诉编译器根据“特定的预定义指示符条件”来在类上应用特性。

#define DEBUG
using System;
using System.Diagnostics;

[Conditional("DEBUG")]
public class TestAttribute : Attribute{}

[Test]
class MyClass{}

几个注意点

如果定义了条件指示符,如#define DEBUG,那么编译器将在MyClass类上应用TestAttribute特性。

如果没有定义条件指示符,如#undef DEBUG,MyClass类照样可以正常使用,但是其上将不在应用TestAttribute特性。

注意区别C# 2.0 中的Conditional特性类和C# 1.0中的Conditional特性方法。

定长buffer的引入

C# 2.0 引入定长来使得我们可以在结构里声明C风格的数组,从而更加方便地实现托管代码和非托管代码的互操作:

unsafe struct MyClass
{
   public fixed int x[5];
   public fixed int y[10];
   public fixed int z[100];
}

几个注意点

定长buffer只能使用在unsafe代码的上下文中,不可以在非unsafe的代码中使用。

使用定长buffer所定义的字段在结构类型的实例对象中将按照它们的声明顺序来进行内存布局。

注意区别unsafe代码中的定长buffer和我们通常使用的托管数组。

定长buffer主要应用在托管代码和非托管代码互操作的情况,除此之外,我们一般使用托管数组。

---------------------------------------------

C# 3.0 与未来发展

C# 2.0 的核心机制在于泛行编程的引入,它赋予了类型参数式多态的能力,将对今后的C#代码构造有重要影响。

研发中的C# 3.0 将XML、SQL两中数据处理技术引入到C#这样的强类型语言中,极大地丰富了C#语言的数据处理能力,是一个极具远见的创新。

C#语言的发展越来越多体现融合“设计模式+库”的思想,“语言的发展就是库的发展”。




本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/11/30/287638.html,如需转载请自行联系原作者

相关文章
|
1月前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
1月前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
40 1
|
3月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
2月前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
|
2月前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
|
2月前
|
存储 安全 算法
C#一分钟浅谈:数据加密与解密技术
【10月更文挑战第3天】在数字化时代,信息安全至关重要。数据加密作为保障信息不被未授权访问的有效手段,通过特定算法将明文转换为密文,确保即使数据被截获也难以解读。本文从基础概念入手,介绍C#中实现数据加密的方法,涵盖对称加密(如AES、DES)与非对称加密(如RSA),并通过具体示例代码演示如何使用`System.Security.Cryptography.Aes`类完成AES加密和解密过程。此外,还强调了密钥管理及安全策略的重要性。
76 4
|
2月前
|
存储 开发框架 .NET
C#语言如何搭建分布式文件存储系统
C#语言如何搭建分布式文件存储系统
78 2
|
2月前
|
负载均衡 网络协议 C#
C#实现WebSocket实时消息推送技术详解
C#实现WebSocket实时消息推送技术详解
74 1
|
2月前
|
数据可视化 NoSQL C#
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)