易截截图软件、单文件、免安装、纯绿色、仅160KB

C# string类型特性小记

(1)string是引用类型:
string是引用类型,这就是说string在堆上保存数据,而在栈中存储的是对象地址,在理解string类型特性时首先需要记住这点。只不过与其它一些引用类型相比,它又有一些比较特殊的特性,比如下面的这些:
(2)string是不可变的(immutable):
string的这一特性是指,对于已有的一个string对象,当你修改它时,实际是重新创建了一个符合你要求的string对象。我通过以下的例子进行演示:
static void Main(string[] args)
{
    string x = "should it matter";
    x = x + " ?"; //breakpoint (1)
}//breakpoint (2)
F5运行至breakpoint (1)处,在即时窗口中执行以下sos调试命令(关于sos调试扩展,可以参见《VS 2005中Sos调试扩展简介》):
!load sos.dll
extension C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727"sos.dll loaded
!clrstack -a
PDB symbol for mscorwks.dll not loaded
OS Thread Id: 0x1508 (5384)
ESP       EIP    
0012f440 012f009f ConsoleApplication1.Program.Main(System.String[])
    PARAMETERS:
        args = 0x0137cdc8
    LOCALS:
        <CLR reg> = 0x0137cdd8
0012f69c 79e7c74b [GCFrame: 0012f69c]
又F5运行至breakpoint (2)处,重新执行clrstack命令,结果如下。可清楚看到对象x在内存中的地址发生了变化,由原来的0x0137cdd8变成0x0137ce24。
!clrstack -a
OS Thread Id: 0x1508 (5384)
ESP       EIP    
0012f440 012f00b0 ConsoleApplication1.Program.Main(System.String[])
    PARAMETERS:
        args = 0x0137cdc8
    LOCALS:
        <CLR reg> = 0x0137ce24
0012f69c 79e7c74b [GCFrame: 0012f69c]
(3)string判等:
对于string类型来说,其equals()方法与“==”操作符起到的效果都是一样的,这点可以从“==”操作的反编译代码中可以看出来:
public static bool operator ==(string a, string b)
{
    return Equals(a, b);


相关文档:

C#中String.Empty与""

    这两个在一般情况下是相等的,但是系统处理机制上却有所不同。
    ""会在内存里划一块长度为0的存储空间,而String.Empty内存并不为它分配空间,所以无论性能还是速度上String.Empty都优于""。
    曾经看过一篇判断字符串空值的性能文章,老外写的国人翻译,文章大意 ......

浅谈C#泛型的用处

为什么要使用C#泛型?
为了了解这个问题,我们先看下面的代码,代码省略了一些内容,但功能是实现一个栈,这个栈只能处理int数据类型:
public class Stack
    {
        private int[] m_item;
        public ......

c#中bin,obj,properties文件夹的作用

  Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。
  obj是object的缩写,用于存放 ......

c# enmu 枚举小结(1)

 
枚举
  枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。
  枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量 ......

浅析工厂模式(C#)

我以为,在所有模式中,最简单、最常用的就是工厂模式了(包括抽象工厂)。
工厂模式和抽象模式的区别在于,工厂模式是通过参数(一般叫型别码)来动态生成对象,而抽象工厂必须了解上下文才能调用相应的对象。实例代码如下:
一、工厂模式
public class Factory
{
public static object Create(int type)
{ ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号