将字段定义为const是很有用的,因为它明确表达了程序员的意图------------即此字段包含不可变的值.但是,只有在编译时知道字段值的情况下才能这么做.所以,如果在运行之前不知道字段值,而且一旦字段被初始化就不应该再修改,那么程序员应该怎么做?这个问题在其他语言中通常无法解决,但是c#语言的设计人员用只读字段来解决了它.
在使用readonly关键字定义字段时,可以在一个地方设置字段值---构造器.此后,类本身或类的客户都不能修改此字段.假设应用程序需要跟踪当前工作站的IP地址.你不希望使用const解决这个问题,因为这需要对IP地址进行硬编码,而且如果工作站是以动态方式获得IP地址的,那么这种技术不起作用.此时就需要使用只读的运行时字段:
using System;
using System.Net;
class Workstation
{
IPAddress ipAddress=Dns.Resolve(HostName).AddressList[0];
IPAddressString=ipAddress.ToString();
}
public const string HostName="cosette";
public readonly string IPAddressString;
}
class GetIpAddress
{
public static void Main()
{
Workstation workstation=new Workstation();
Console.WriteLine("The IP address for '{0}' is {1}", Workstation.HostName,Workstation.IPAddressString);
}
}