`
380071587
  • 浏览: 449079 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

string型参数传递方式

 
阅读更多

引用类型包括:

  • 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作为形式参数传递给方法的情况

    String型参数作为形参传递给方法时的情况。

    c# winform间传递参数的方法

    C#中没有了像VB.Net中的全局变量,那么我们如何实现在不同的页面间传递参数呢? 下面举例说明如何实现这一功能. 1.新建一个项目. 2.在该工程中添加一个窗体Form1. 3.在该窗体中定义静态型字符串变量myTestStr1: ...

    java的传值与传引用详解

     C 语言中有一种数据类型叫做指针,于是将一个数据作为参数传递给某个函数的时候,就有两种方式:传值,或是传指针,它们的区别,可以用一个简单的例子说明: /* 例 5 */ /** * @(#) test.c * @author fancy */...

    关于 byval 与 byref 的区别分析总结

    在JavaScript中: Boolean,Number,String型的参数是按值传递的 ==> 相当于VBS中的ByVal; 而Object型的参数(包括JS对象,Array对象,Function对象等),是按引用传递 ==> 相当于VBS中的ByRef 代码如下:<!DOCTYPE...

    VB 验证码识别示例+(亦思验证码识别系统3.1破解版

    以下DLL对于整数型不需要用的就传递 0 ,文本不需要用的就传递 空文本。 文件说明: ycode.dll主调用DLL,其他的为,辅助文件。 ------------------------------------------------------------------------------...

    SQLHelper.cs

    每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。类中实现的所有方法都支持以下重载: [C#] Execute* (SqlConnection connection, CommandType commandType, string ...

    .net数据访问类 SQL Helper 类

    每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。类中实现的所有方法都支持以下重载: [C#] Execute* (SqlConnection connection, CommandType commandType, string ...

    编译原理上机实习

    //此函数判断传递的参数是否为关键字,是的话,返回真,反之返回假 (2)简要分析词法分析程序的运行流程: ①符号表中1 到5: 1- 关键字 2-标志符 3-常数 4-运算符 5-界符 ②关键函数(此函数接受一个字符串...

    第4章-Java面向对象程序设计-Java语言GUI程序设计-赵满来-清华大学出版社.pptx

    4.1.2 方法的调用及参数传递 对象名.方法名(参数表); Java程序中方法的调用是按值调用,即调用者将实参的值传递给被调方法对应的形参。 实参与形参的类型、次序和个数一一对应。 基本数据类型参数,形参复制了实参...

    checks:简单,简洁,易读和快速的函数参数类型检查

    参数类型检查API 该库声明了一个checks()函数和一个checkers表,它们允许以快速,简便的方式检查传递给Lua函数的参数。 凝视精华它并非旨在验证用户输入。 它旨在提供更好的函数参数类型检查。 它并非旨在隐藏您的...

    java笔试题

    18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 19、String和StringBuilder、StringBuffer的区别? 20、重载(Overload)和...

    eightyxy.zip

    编写一个程序,从键盘接收十个整数,并输出其中的最小值,要求,将计算功能定义在一个类中,由主类负责接收输入,在用数组的方式传递给实现计算的类的方法,在输出结果 练习9(基础): (1)定义Person类,有4个属性...

    在一小时内学会 C#(txt版本)

    函数参数 ? 数组 ? 索引器 ? 装箱与拆箱 ? 委托 ? 继承与多态 以下主题不会进行讨论: ? C++ 与 C# 的共同点 ? 诸如垃圾回收、线程、文件处理等概念 ? 数据类型转换 ? 异常处理 ? .NET 库 编程结构 和 C++ ...

    java基础知识下载

    //指定变量str1为String型,且赋初值为Hi c = ' A ' ; //给字符型变量c赋值'A' str = " bye " ; //给字符串变量str赋值"bye" x = 12 ; //给整型变量x赋值为12 y = 300; //给整型变量y赋值为300 } }

    继承多态定义一个类Employee(雇员)

    一个构造方法,带参数,初始化各个属性,特别要求带有年月日的参数,并利用GregorianCalendar日历类生成日期并转化成对应的Date类的日期 对于每个属性添加一个set和get方法 一个实现增长薪水的的方法raiseSalary...

    javascript函数的解释

    105.parseFloat(string[,radix])强制转换成浮点型. 106.isNaN(变量):测试是否为数值型. 107.定义常量的关键字:const,定义变量的关键字:var 108.isNaN()是JavaScript 的内部函数,对参数进行运算,判断其是否为非数字...

    指挥官:在Swift中编写漂亮的命令行界面

    传递给command函数的闭包采用任何符合ArgumentConvertible ,Commander会自动将参数转换为这些类型。 如果无法转换,则用户将收到一条不错的错误消息,通知他们其参数与预期的类型不匹配。 扩展了String , Int , ...

    Golang字符串函数

    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...

    OWC绘箱形图

    要传递的参数主要为 Series,即数据组计算结果集,还有string PicTitle, string XTitle, string YTitle, double[] stdline,分别为图表名,X轴,Y轴标签名,以及Stdline 标准值,超限允差,报警允差

    C# 程序设计手册(WORD)

    传递数组当做参数 40 使用 ref 和 out 传递数组 42 隐含型别数组 44 字符串 45 字符串基本概念 46 串连多个字符串 53 修改字符串内容 56 比较字符串 60 分割字符串 65 使用字符串方法搜寻字符串 66 使用正则表达式...

Global site tag (gtag.js) - Google Analytics