2019/12/26今天复习一些基础的东西

1、哪些变量是放在栈,哪些放堆
c#中的变量可以分为值类型和引用类型,值类型包括:简单类型,结构类型和枚举类型,引用类型包括类,数组,接口。
值类型在栈中操作,而引用类型在堆中操作,静态变量放全局区。栈在编译时分配内存空间,而堆是在运行时动态分配内存空间,可以根据程序的运行情况动态的分配内存的大小,因此,值类型在内存中占用一个预定义的字节数,栈是先入后出的,栈中上面的变量总是比下面的变量先离开作用域。

class Program
    {
        static void Main(string[] args)
        {
            swamp x = new swamp();
            x.myvalue = 3;
            swamp y = new swamp();
            y = x;//此时,把x的在栈中的对象的地址给了y,此致他们两个都指向同一个存储对象数据的内存块;
            y.myvalue = 4;
            Console.WriteLine(x.myvalue);//输出的那自然而然就是4;
        }
    }
    class  swamp
    {
        public int myvalue;
    }

2、值的交换
(1)在方法内部进行交换,改变的只是其副本的值,但是在栈内存中,它们的值并未改变

class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            int b = 6;
            swap(a, b);
            Console.WriteLine("内存的a和b的值为 : a={0},b={1}", a, b);
        }
        public static void swap( int a,int b)
        {
            int temp = a;
            a = b;
            b = temp;
            Console.WriteLine("在方法内部交换后其副本的值为 : a={0},b={1}",a,b);
        }
        //运行结果如下
        //在方法内部交换后其副本的值为 : a=6,b=5
		//内存的a和b的值为 : a=5,b=6
    }

(2)想要在方法内部进行交换改变其内存中的值,就要用到ref,ref的意思为引用参数,其实完全可以不用去理解它是什么意思,如果你想在副本的值改变的同时改变内存的值时候,就是用它,关键就是在使用值类型前面加上ref这个关键字(注:ref和out的唯一区别就是,前者要赋初值,后者不用赋初值)

class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            int b = 6;
            swap(ref a, ref b);
            Console.WriteLine("内存的a和b的值为 : a={0},b={1}", a, b);
        }
        public static void swap(ref int a,ref int b)
        {
            int temp = a;
            a = b;
            b = temp;
            Console.WriteLine("在方法内部交换后其副本的值为 : a={0},b={1}",a,b);
        }
        //运行结果如下
        //在方法内部交换后其副本的值为 : a=6,b=5
        //内存中的a和b的值为 : a=6,b=5
    }


最近关于C#的感悟就这些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值