c# ref和out 详解
c# 详解 out ref
2023-09-14 09:01:09 时间
前言
数据在内存中,存在两种状态,堆和栈中。堆中的数据是可以直接拿到的,一般称引用对象。
这些对象有一个特征,那就是经过函数处理之后,这些数据在主线程中改变了。好奇点好了,为什么栈中的数据就不会改变呢?难道是没有计算?
其实计算机哪有这么聪明,不过是找了个替代者----形参。可以说就像古代上战场抓壮丁一样,总有些替代者,战场无论生死和原来没有去的那个人没有任何关系。
这就形成了一种特殊情况了,那么特殊情况下就拥有局限性,所以出现了ref和out。
正文
ref和out到底是啥?有什么区别。
区别:ref是传的的是地址。是地址那么就有地标和名称,比如说经度纬度定位到某个地方。
所以有一个规定就是ref必须赋值然后才能调用,为什么会有这个规定呢,或者说是不是必须有这个规定呢。
是的,必须的,很简单,如果一个地址没有对应到栈中的参数,它在赋值的时候就需要往堆中分配一个,而函数其实就是一个对象,会分配相应的堆区,这些区是会被释放的,所以任何修改没有任何意义。
out 是啥?out是这样的。就像一个门外汉,在外面等,等给他东西。为何out不能传值?假设out传递了值,那么他是这样的,在函数中创建了一个形参,并分配了一个栈,可以说是一个新的对象。这时候好像回到了原点。那么这个out是这样做的,out的确是分配了函数的栈,但是它不释放。
优点:两者都可以让传入函数的值类型得到改变。缺点:性能肯定是下降了。
对于string的优化
string有一种方式,叫做stringbuild,这个关键字是引用类型,可以解决一下string的问题,性能比ref和out好点。
相关文章
- c#启动外部程序_winform程序自动更新
- C#中泛型类和扩展方法如何使用案例分享
- 操作mysql的C#类详解数据库
- resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现详解编程语言
- c#通过操作mongodb gridfs实现文件的数据库存储详解编程语言
- C# winform只有一个进程详解编程语言
- C与Oracle数据库的安全关闭(c# oracle关闭)
- 把jQuery的each(callback)方法移植到c#中
- C#IFF图形结构解析代码
- c#汉诺塔的递归算法与解析
- 使用@符号让C#中的保留字做变量名的方法详解
- c#自定义泛型链表类的详解
- 探讨C#中Dispose方法与Close方法的区别详解
- c#之圆形无标题栏椭圆窗体的实现详解
- c#之滚动字幕动画窗体的实现详解
- 关于C#基础知识回顾--反射(一)
- C#启动和停止windows服务的实例代码
- C#日期格式化的几个要点小结
- C#面向对象特征的具体实现及作用详解
- C#串口通信程序实例详解
- C#用户定义类型转换详解
- c#的params参数使用示例
- C#对称加密与非对称加密实例
- C#实现根据数字序号输出星期几的简单实例
- C#针对xml文件转化Dictionary的方法
- C#执行SQL事务用法实例
- c#中实现图片灰度化技术详解
- C#中常见的系统内置委托用法详解
- C#观察者模式(ObserverPattern)实例教程