ref和out的区别,值类型和引用类型的使用
今天刚刚明白ref和out的区别,只限于个人理解如有不同请赐教,谢谢
首先我感觉ref和out是针对于值类型来说,以前一直认为是针对于引用类型看下面的一段代码
1.首先结果 i=0;ints[0]=0 i=0;ints[0]=100
2.ints作为一个引用类型在传入方法后,对ints[0]进行了赋值,是将引用类型的地址引用到了100这个值得堆上,
3.而值类型i引入到另外一个方法后进行赋值不会对原有字符串进行改变
4.ref就是为了解决这个问题,让值类型能够和引用类型一样在传入方法后值会进行改变
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demo
{
class Program
{
static void SomeFunction(int[] ints, int i)
{
ints[] = ;
i = ;
}
static void Main(string[] args)
{
int i = ;
int[] ints = { , , , , };
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
SomeFunction(ints, i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
Console.ReadKey();
}
}
}
5.将代码添加上ref 结果:i=0;int[0]=0;i=100;ints[0]=100
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demo
{
class Program
{
static void SomeFunction(int[] ints, ref int i)
{
ints[] = ;
i = ;
}
static void Main(string[] args)
{
int i = ;
int[] ints = { , , , , };
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
SomeFunction(ints, ref i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
Console.ReadKey();
}
}
}
所以我认为ref是对值类型的改变而且和out一样,在进行传递参数的时候对变量进行了初始化。
而out只是在传递参数的时候不用进行赋值,但是在调用的方法里面必须进行赋值,负责会报没被赋值的out参数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demo
{
class Program
{
static void SomeFunction(int[] ints, out int i)
{
ints[] = ;
i = ;
}
static void Main(string[] args)
{
int i;
int[] ints = { , , , , };
//Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
SomeFunction(ints, out i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
Console.ReadKey();
}
}
}
ref和out的区别,值类型和引用类型的使用的更多相关文章
- 20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)
1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class ...
- 图解C#的值类型,引用类型,栈,堆,ref,out
C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜 ...
- 值类型,引用类型,栈,堆,ref,out
在网上收集... C#的值类型,引用类型,栈,堆,ref,out C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C# ...
- 转:图解C#的值类型,引用类型,栈,堆,ref,out
C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜 ...
- C#中对值类型和引用类型的一点认识
区别值类型和引用类型的重要一点就是值类型赋值的时候是给出一块内存空间,空间里放下要赋给值类型的值.而引用类型是开辟一块内存空间,空间里放下的是要赋给引用类型值的指向地址. 就像一个是复制了银行卡里的现 ...
- C#学习笔记之值类型与引用类型
[TOC] C#学习笔记之值类型与引用类型 1.值类型与引用类型 1.1 深层区别 值类型与引用类型有不同的内存分布,这导致了不同的内存管理机制: 值类型由OS负责内存管理 引用类型由垃圾回收器(GC ...
- (11)C#值类型和引用类型,堆和栈,ref和out,装箱和拆箱
一.值类型和引用类型定义 以内存中的存在方式可以把变量分成两大类型,值类型和引用类型. 值类型:系统只占用一块内存,数据直接存储在内存里. 引用类型:系统占用两块内存,一块存放地址,另一块存放实际数据 ...
- JAVA初学(1):值类型和引用类型的区别
JAVA值类型和引用类型的区别(转) [定义] 引用类型表示你操作的数据是同一个,也就 ...
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...
- C#入门篇6-7:字符串操作 看看字符串的特殊之处 值类型与引用类型的区别
//看看字符串的特殊之处值类型与引用类型的区别 public static void CompareString(string stra, string strb, int i) { #region ...
随机推荐
- Bug 是改不完滴
- centos7安装mysql
centos7安装mysql 1 查找系统是否安装了myql rpm -q mysql mysql-server1.1如果安装了.就删除 sudo yum -y remove mysql mysql- ...
- Java List循环(转)
List有三种循环方式: 分别是经典的for循环,迭代器(list.iterator()),foreache循环(和C#相同哦) 测试代码如下: public static void main(Str ...
- Matla学习:figure+axes+plot
function fig = SetDrawParam() %.获得屏幕尺寸 figpos = , 'ScreenSize');%获得屏幕尺寸,单位像素 %.设置坐标系在画布中的位置,针对不同尺寸或不 ...
- jQuery:find()及children()的区别
1:children及find方法都用是用来获得element的子elements的,两者都不会返回 text node,就像大多数的jQuery方法一样. 2:children方法获得的仅仅是元素一 ...
- zabbix通过sendmail进行邮箱警报
安装sendmail /usr/lib/zabbix/alertscripts/SendEmail.sh #!/bin/bash to_email_address="$1" # 收 ...
- Java8新特性【转】
地址:http://ifeve.com/java-8-features-tutorial/ 1.简介 毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级,Ja ...
- 10G之后统计信息收集后为什么执行计划不会被立马淘汰
在10G之前,使用DBMS_STATS收集统计信息将会导致与此对象相关的游标失效,下次执行此 的时候将会进行HARD PARSE,除非收集的时候NO_INVALIDATE设置为TRUE. 由于硬解析会 ...
- win7设置防火墙允许Ping与telnet
Ping: 打开控制面板 >> 系统安全 >> windows防火墙 >> 高级设置 >> 入站规则
- Arrays
Arrays:用于操作数组对象的工具类,里面都是静态方法. asList方法:将数组转换成list集合. String[] arr = {"abc","kk", ...