引用类型包括:
-
String
-
所有数组,即使其元素是值类型
-
类类型,如
Form
-
委托
参考 http://msdn.microsoft.com/zh-cn/library/t63sy5hs(VS.80).aspx
既然msdn上说string是引用类型,那么我们就用一段代码验证一下。
class Program
{
static void Main(string[] args)
{
string str = "abc";
TestFun(str);
Console.WriteLine(str);
Console.ReadLine();
}
private static void TestFun(string strVal)
{
strVal = "hello";
}
}
运行结果:
按一般引用类型的规律,str会被改成hello,然后输出结果为 hello。
下面我们来分析一下其中的原因。
首先,参数传入函数的默认行为时按值传递。数据的副本会被传入函数,也就是str(地址)的副本回复制给strVal,strVal指向的地址发生改变不会影响到str。
然后,System.String 一个有趣的方面是,一旦将初始值给字符串对象,字符串数据就不能改变了。当改变字符串内容时,托管堆上会加载一个新的字符串对象,之前包含的字符串对象最终会被垃圾回收。
那么,也就是说,strVal在函数内部修改了自己的指向地址,而这种改变不会影响str。所以,str值不会像一般的引用类型那样被改变。
分享到:
相关推荐
String型参数作为形参传递给方法时的情况。
C#中没有了像VB.Net中的全局变量,那么我们如何实现在不同的页面间传递参数呢? 下面举例说明如何实现这一功能. 1.新建一个项目. 2.在该工程中添加一个窗体Form1. 3.在该窗体中定义静态型字符串变量myTestStr1: ...
C 语言中有一种数据类型叫做指针,于是将一个数据作为参数传递给某个函数的时候,就有两种方式:传值,或是传指针,它们的区别,可以用一个简单的例子说明: /* 例 5 */ /** * @(#) test.c * @author fancy */...
在JavaScript中: Boolean,Number,String型的参数是按值传递的 ==> 相当于VBS中的ByVal; 而Object型的参数(包括JS对象,Array对象,Function对象等),是按引用传递 ==> 相当于VBS中的ByRef 代码如下:<!DOCTYPE...
以下DLL对于整数型不需要用的就传递 0 ,文本不需要用的就传递 空文本。 文件说明: ycode.dll主调用DLL,其他的为,辅助文件。 ------------------------------------------------------------------------------...
每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。类中实现的所有方法都支持以下重载: [C#] Execute* (SqlConnection connection, CommandType commandType, string ...
每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。类中实现的所有方法都支持以下重载: [C#] Execute* (SqlConnection connection, CommandType commandType, string ...
//此函数判断传递的参数是否为关键字,是的话,返回真,反之返回假 (2)简要分析词法分析程序的运行流程: ①符号表中1 到5: 1- 关键字 2-标志符 3-常数 4-运算符 5-界符 ②关键函数(此函数接受一个字符串...
4.1.2 方法的调用及参数传递 对象名.方法名(参数表); Java程序中方法的调用是按值调用,即调用者将实参的值传递给被调方法对应的形参。 实参与形参的类型、次序和个数一一对应。 基本数据类型参数,形参复制了实参...
参数类型检查API 该库声明了一个checks()函数和一个checkers表,它们允许以快速,简便的方式检查传递给Lua函数的参数。 凝视精华它并非旨在验证用户输入。 它旨在提供更好的函数参数类型检查。 它并非旨在隐藏您的...
18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 19、String和StringBuilder、StringBuffer的区别? 20、重载(Overload)和...
编写一个程序,从键盘接收十个整数,并输出其中的最小值,要求,将计算功能定义在一个类中,由主类负责接收输入,在用数组的方式传递给实现计算的类的方法,在输出结果 练习9(基础): (1)定义Person类,有4个属性...
函数参数 ? 数组 ? 索引器 ? 装箱与拆箱 ? 委托 ? 继承与多态 以下主题不会进行讨论: ? C++ 与 C# 的共同点 ? 诸如垃圾回收、线程、文件处理等概念 ? 数据类型转换 ? 异常处理 ? .NET 库 编程结构 和 C++ ...
//指定变量str1为String型,且赋初值为Hi c = ' A ' ; //给字符型变量c赋值'A' str = " bye " ; //给字符串变量str赋值"bye" x = 12 ; //给整型变量x赋值为12 y = 300; //给整型变量y赋值为300 } }
一个构造方法,带参数,初始化各个属性,特别要求带有年月日的参数,并利用GregorianCalendar日历类生成日期并转化成对应的Date类的日期 对于每个属性添加一个set和get方法 一个实现增长薪水的的方法raiseSalary...
105.parseFloat(string[,radix])强制转换成浮点型. 106.isNaN(变量):测试是否为数值型. 107.定义常量的关键字:const,定义变量的关键字:var 108.isNaN()是JavaScript 的内部函数,对参数进行运算,判断其是否为非数字...
传递给command函数的闭包采用任何符合ArgumentConvertible ,Commander会自动将参数转换为这些类型。 如果无法转换,则用户将收到一条不错的错误消息,通知他们其参数与预期的类型不匹配。 扩展了String , Int , ...
string -> int func main(){ n,err := strconv.Atoi(123) if err != nil { fmt.Println(err) }else{ fmt.Println(n) } } 结果 123 整数转字符串 str := strconv.Itoa(123) fmt.Println(str) 结果 “123...
要传递的参数主要为 Series,即数据组计算结果集,还有string PicTitle, string XTitle, string YTitle, double[] stdline,分别为图表名,X轴,Y轴标签名,以及Stdline 标准值,超限允差,报警允差
传递数组当做参数 40 使用 ref 和 out 传递数组 42 隐含型别数组 44 字符串 45 字符串基本概念 46 串连多个字符串 53 修改字符串内容 56 比较字符串 60 分割字符串 65 使用字符串方法搜寻字符串 66 使用正则表达式...