• 对于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
  • 相关阅读:
    win10下安装scrapy不成功的问题解决
    python方法和函数区别
    关于Django 报错 ImportError: cannot import name RegexUrlResolver解决
    Django+Vue后端解决跨域问题
    python中yield的用法
    启动后、路由加载之前定制一段代码(基于admin原理)
    Hadoop期末复习
    python爬虫期末复习
    idea开发环境搭建ssh
    intelliJ破解及JavaEE搭建
  • 原文地址:https://www.cnblogs.com/juqiang/p/37549.html
Copyright © 2020-2023  润新知