C# 基础知识整理

误区1:引用类型保存在堆上,值类型保存在栈上

第一部分是正确的的,引用类型的实例总是在堆上创建的。但第二部分就有问题了。变量的值是在它声明的位置存储的。所以,假定一个类有一个int类型的实例变量,那么这个类的任何对象中,该变量的值总是和对象中的其他数据存放在一起的,也就是堆上。
只有局部变量(方法内部声明的变量)和方法参数在栈上。对于C#2及更高版本,很多局部变量并不完全存放在栈中。(后续补充。。。)

误区2: 对象在C#中默认是通过引用传递的

目前个人理解是不管值类型还是引用类型传递的都是声明的变量的地址值,上代码比较直观一些
图片为个人理解,如有错误还请指正
1049956-20190508113829154-1739701458.png

 static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("GYY");
            foo(sb);
            Console.WriteLine(sb.ToString()); //输出:GYY你好
            foo1(sb);
            Console.WriteLine(sb.ToString());//输出:GYY你好
            foo2(ref sb);
            Console.WriteLine(sb.ToString());//输出:GGG
            Console.ReadKey();
            int x = 1;
            voo(x);
            Console.WriteLine(x);//输出:1
            voo(ref x);
            Console.WriteLine(x);//输出:10
            Console.ReadKey();


        }
        static void foo(StringBuilder s)
        {
            s.Append("你好");
        }
        static void foo1(StringBuilder s)
        {
            s = new StringBuilder();
            s.Append("GGG");
        }
        static void foo2(ref StringBuilder s)
        {
            s = new StringBuilder();
            s.Append("GGG");
        }
        static void voo(int x)
        {
            x = 5;
        }
        static void voo(ref int x)
        {
            x = 10;
        }

转载于:https://www.cnblogs.com/GYY2046/p/10830420.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值