技术开发 频道

C#本质:运算符和控制流

  【IT168 技术讲解】处理器不能直接解释一个程序集.程序集采用的是另一种语言,即公共中间语言(Common Intermediate Language, CIL),或者简称为中间语言(IL).

  注意 CIL的另一种说法即MSIL, 即Microsoft IL.

  C#编辑器只是将C#源代码文件转换成为CIL.为了将CIL代码转换成处理器能够理解的机器码,还要执行一个额外的步骤(该步骤通常是在执行时完成的).这个步骤涉及C#执行中的一个重要元素:VES(Virtual Execution System,虚拟执行系统).VES也被人称为“运行时”,它根据需要来编译CIL代码,这个过程称为即时编译或者JIT编译(just-in-time compilation).

  托管代码(managed code) :代码在"运行时"这样一个"代理"的上下文中执行.

  托管执行(managed execution):在"运行时"的控制下执行的过程.

  非托管代码(unmanaged code):在执行过程中不需要"运行时"的代码.

  CLI(common Languageinfrastructure,公共语言基础结构)

  VES规范被包含在一个包容面更广的规范中,即CLI(common Languageinfrastructure,公共语言基础结构)规范.作为一个国际行标准,CLI包含了以下几方面的规范.

  VES或"运行时".

  CIL

  为语言互操作性提供支持的一个类型系统,成为CTS(Common Type System,公共类型系统).

  如何编写能通过各种CLI兼容语言访问的库的指导原则,这部分内容具体放在公共语言规范(Common Language Specification CLS)中.

  市各种服务能被CLI(包括程序集的布局或文件格式规范)识别的元数据

  一个公共编程框架,称为基类库(Base Class Library, BCL),所有语言的开发者都能利用它.

  语言互操作性:不同源语言之间的互操作性.语言编译器将每一种源语言转换成相同的中间语言(CIL),从而实现这种互操作性.

  类型安全:检查类型间的转换,确保只有相互兼容的类型才会进行转换.这有助于防止发生缓冲区溢出.造成安全问题的一个主要诱因.

  代码访问安全性:程序集开发者的代码有权在计算机上执行的证明

  垃圾回收

  平台可移植性

  BCL

  基本数据类型

  C#数据类型大体有:基本数据类型(整数/浮点/decimal类型)、布尔类型、字符类型、字符串类型

  C#共有8种整数类型,可以选择恰当的一种数据类型来存放数据,避免浪费资源. 下面对每种整数类型进行总结:

C#之解读托管执行和公共语言基础结构

  C#基本字符串类型为string(C#中类型区分大小写),BCL名称为System.string.

  在这里讲一点string比较深入的内容.

  length属性

  length()方法,主要用于获取数据类型的长度,而在string类型中,length实际只是string的一个属性,C#语法允许像访问一个成员变量那样访问一个属性.为了判断一个字符串长度,可以使用string的length成员,我们将这个特定的成员称为一个只读属性.所以不能设置它,调用它也不需要任何参数.

  代码清单 使用string的length成员

{

      static void Main()

      {

          
string palindrome;

          System.Console.Write(
"Enter a palindrome: ");

          palindrome
= System.Console.ReadLine();

          

          System.Console.WriteLine(
"The palindrome, \"{0}\"  is  {1}  

characters.
",palindrome,palindrome.length);

      }

}

 

  字符串是不可变的

  string类型的关键特征在于它是不可变的。可以为一个string变量赋一个全新的值,但出于对性能的考虑,没有机制可供修改一个字符串的内容.

  代码清单 错误,string是不可变的

class Uppercase

  {

  static void Main()

  {

  
string text;

  System.Console.Write(
"Enter text: ");

  text
= System.Console.ReadLine();

  text.ToUpper();


  System.Console.WriteLine(text);

  }

  }

 

  输出

  Enter text:This is a test of the emergency broadcast system.

  System.Text.string 和 System.Text.StringBuilder 区别?

  如果有大量字符串进行修改,比如要经历多个步骤来构造一个长字符串,那么应当使用System.Text.StringBuilder.string的原理是在栈中新建一个内存地址,把原有的对象复制到新的地址,然后删除原来的对象.这一来二去的操作很麻烦,效率也不高.这个时候可以改用System.Text.StringBuilder,StringBuilder提供了Append()、AppendFormat()、Insert()、Remove()和Replace()这样的方法.但两者的关键区别在于,在System.Text.StringBuilder上,这些方法会修改变量中的数据,而不是返回一个新字符串.

  null和void

  与类型有关的两个额外的关键字是null和void.null是一个字面值,用来表示数据类型(具体就是引用类型)未被赋予任何值.void用来表示没有类型,或者没有任何值.

  null值只能赋给引用类型,不能赋给值类型.引用类型包含一个指针、一个地址、或者一个引用,它指向内存中的一个特定位置.

  必须注意的是,和根本不进行赋值相比,将null赋给一个引用类型完全是不同的概念.换言之,赋值为null的变量已被设置,而未进行赋值的变量未被设置.所以假如在赋值前使用变量,通常会造成一个编译时错误.

  null意味着变量无任何值,而""意味着变量有一个值,一个空字符串.

  void本质上并不是一个数据类型,它只是用于指出没有数据类型这一事实.

0
相关文章