当前位置:  编程技术>.net/c#/asp.net

c#值类型与引用类型的区别

    来源: 互联网  发布时间:2014-08-30

    本文导语:  c#两大数据类型:值类型(struct)与引用类型(class),在实际的c#编程中应用广泛。 本文通过具体的实例,为大家介绍c#中值类型(变量)与数值类型(变量)的区别。 1、首先来看值类型作为参数 当使用值向方法传递参数时,编译程...

c#两大数据类型:值类型(struct)与引用类型(class),在实际的c#编程中应用广泛。
本文通过具体的实例,为大家介绍c#中值类型(变量)与数值类型(变量)的区别。

1、首先来看值类型作为参数
当使用值向方法传递参数时,编译程序将实参的值做一份拷贝,并将此拷贝传递给该方法。
被调用的方法不会修改内存中实参的值。使用值参数时,可以保证实际值是安全的。
在调用方法时,如果形式化参数的类型是值参数的话,调用的实参的值必须保证是正确的值表达式。

以下的示例,并未实现交换值的目的:
 

代码示例:
using System;
class Test
{
static void Swap(int x,int y){
int temp=x;
x=y;
y=temp;
}
static void Main(){
int i=1,j=2;
Swap(i,j);
Console.WriteLine("i={0},j={1}",i,j);
}
}
 

输出:
i=1,j=2

2、引用类型作为参数
引用型参数并不开辟新的内存区域。
使用引用型参数向方法传递形参时,编译程序将把实际值在内存中的地址传递给方法。
在方法中,引用型参数通常已经初始化。
例如,下面这个例子:
 

代码示例:
using System;
class Test
{
static void Swap(ref int x,ref int y){
int temp=x;
x=y;
y=temp;
}
static void Main(){
int i=1,j=2;
Swap(ref i,ref j);
Console.WriteLine("i={0},j={1}",i,j);
}
}
 

输出:
i=2,j=1

Main函数中调用了Swap函数,x代表i,y代表j,成功实现了i和j的值交换。
注意:在方法中使用引用型参数,可能导致多个变量名指向同一处内存地址的情况发生。
如下面这个例子:
 

代码示例:
class A
{
string s;
void F(ref string a,ref string b){
s="One";
a="Two";
b="Three";
}
void G(){
F(ref s,ref s);
}
}
 

在方法G对F调用时,s的引用被同时传递给了a和b。此时,s,a,b同时指向了同一块内存区域,显然这并不是我们所期望看到的。
通过以上三个例子,我想你已经对C#值类型与引用类型的区别有所理解,祝您学习愉快。


    
 
 

您可能感兴趣的文章:

  • C#难点逐个击破(6):C#数据类型与.net framework数据类型
  • C#枚举类型与结构类型实例解析
  • c# 所有类型都从Object类型派生
  • c# 引用类型和值类型
  • C#引用类型和值类型的介绍与实例
  • C#中值类型与引用类型作为参数传递时的区别
  • c#值类型和引用类型使用示例
  • c#可空类型的作用说明
  • c# 类型转换
  • C# char类型字符转换大小写的实现代码
  • C#判断数据类型的简单示例代码
  • c# 值类型实例构造器
  • C#随机生成Unicode类型字符串
  • c#字符串值类型与引用类型比较示例
  • C# 遍历枚举类型的所有元素
  • c# 引用类型构造器
  • c# 类型构造器学习
  • c#判断磁盘驱动器类型的两种方法介绍
  • 深入C#中使用SqlDbType.Xml类型参数的使用详解
  • c# 类型构造器
  • 怎么样把基本数据类型转换为引用类型啊?唉,菜鸟
  • java的引用类型的详细介绍
  • JAVA中如何实现对基本类型的引用?
  • GCC下引用类型
  • 关于引用类类型的赋值问题
  • c# 引用类型与值类型的区别详解
  • C#引用类型转换的常见方式总结
  • c++中拷贝构造函数的参数类型必须是引用
  • 深入解析C++中的引用类型
  • C#值类型和引用类型的深入理解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: type定义参考
  • java 基本类型或可序列化类型,这里说的可序列化类型是什么意思???具体都有哪些类型??谢谢
  • java命名空间javax.annotation注释类型resource的类成员方法: authenticationtype定义及介绍
  • 求救:关于将类型名称字符串转变成类型相应类型的问题
  • java命名空间javax.annotation注释类型resource的类成员方法: type定义及介绍
  • 请问能否把任何类型数据转换为一种类型,然后从这种类型又转换回去?例如:int>>Object Object>>int
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: value定义参考
  • ado的rs.field("字段名")可以访问任何类型的数据,那吗java里面这种问题如何处理。是不是要先判断类型然后再根据类型来使用相应的getint or getString阿!谢谢了!在线等待!
  • java命名空间javax.annotation注释类型resource的类成员方法: shareable定义及介绍
  • oracle中的空类型与c语言的空类型相匹配吗?
  • java命名空间javax.jws注释类型webparam的类成员方法: mode定义及介绍
  • 如何将String类型转换成Blob类型
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: wsdllocation定义参考
  • 怎样将字符串类型转换成double类型?
  • java命名空间javax.xml.bind.annotation注释类型xmlelementref的类成员方法: type定义及介绍
  • linux修改所有文件类型为文本类型
  • java命名空间javax.xml.bind.annotation注释类型xmlenum的类成员方法: value定义及介绍
  • (在线等)无符号int类型如何向ip类型进行转换呢
  • java命名空间javax.xml.ws注释类型responsewrapper成员方法: targetnamespace定义参考
  • String类型数据与Date类型转换的问题?
  • java命名空间javax.xml.ws注释类型responsewrapper成员方法: classname定义参考
  • 请问在jbuilder中如何将String类型的字符串赋值给StringBuffer类型的变量?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3