zoukankan      html  css  js  c++  java
  • 对于string类的困惑

    我们都知道,string类是一个reference type。看下面这段代码:
    string s1 = "hello";
    string s2 = s1;
    Console.WriteLine(s1);
    Console.WriteLine(s2);
    s1 
    = "world";
    Console.WriteLine(s1);
    Console.WriteLine(s2);
    按理来说,s1被赋予world之后,那么s2应该也是指向这段内存空间,输出world,但实际上不是这样。
    代码输出为:
    hello
    hello
    world
    hello
    C#高级编程中是这么解释的,s1被修改后,会重新分配一块内存,来指向新的s1。这是解释了为什么会有这个结果。但是,它没有解释,CLR为什么要这么特殊处理string类。难道,因为string类用的特别多,要符合大家的使用习惯?

    看下面这段代码,class很明显也是一个reference,但是结果却和上面不同。
    // 类的定义
    public class Test{
        
    private int number;

        
    public Test(int number){
            
    this.number = number;
        }


        
    public int Number{
            
    get{return number;}}

            
    set{number = value;}
        }


        
    public override string ToString(){
            
    return Number.ToString();
        }

    }

    // 测试代码
    Test t1 = new Test(10);
    Test t2 
    = t1;
    Console.WriteLine(t1.ToString());
    Console.WriteLine(t2.ToString());
    t1.Number 
    = 20;
    Console.WriteLine(t1.ToString());
    Console.WriteLine(t2.ToString());

    上述代码输出的,是我们期望的值:
    10
    10
    20
    20
  • 相关阅读:
    poj 2262
    poj 1050
    poj 1730
    poj 1061
    【设计模式】简单工厂模式学习
    【待学】
    [设计模式]策略模式和单一职责
    Windows live writer 误删 草稿 恢复
    [Linq]Linq To Sql (2)
    MVC 学习日志1(上)
  • 原文地址:https://www.cnblogs.com/juqiang/p/37549.html
Copyright © 2011-2022 走看看