代码改变世界

《C#本质论》读书笔记(三)

2010-07-19 14:28  张抗  阅读(1261)  评论(1)    收藏  举报

数据类型:字符串(string)

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

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

 

length属性

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

代码清单  使用string的length成员

class PalindromeLength

{

      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本质上并不是一个数据类型,它只是用于指出没有数据类型这一事实.