A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-张扬 中级黑马   /  2012-12-4 09:57  /  2018 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

值参数我知道,引用参数和输出参数难道不是一样的吗,为什么要搞个输出参数呢?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

5 个回复

倒序浏览
引用参数以ref为关键字,这种参数是要在调用之前就初始化的。这参数一般情况下是从外部向内部传递数值的时候使用,对于托管代码加ref和不加基本相同,但是对于托管代码就有所区别。输出参数以out为关键字,这种参数不需要输入确定的值,实际的对象是在方法内部初始化,由方法内部给这种参数赋值。一般是调用该方法之后,需要方法输出一些数据的时候使用。因为有时候方法的返回值可能用作他用,而这时还想让方法输出其他的数据,就可以使用out参数了。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
马海保 发表于 2012-12-4 11:29
引用参数以ref为关键字,这种参数是要在调用之前就初始化的。这参数一般情况下是从外部向内部传递数值的时 ...

就为这点事多搞出个关键字来?不麻烦吗?按理说程序语言的设计原则不是越少关键字月号码
回复 使用道具 举报
形参顾名思义就是形式上的参数,不是实际的参数,它代替实际传入方法的值。在方法体代码中代表了值本身参与运算。形参定义于参数中,它不同于方法体内局部变量,因为是一个变量,在它的作用域内不允许存在一个同名的局部变量,不管他们的类型是否相同,都是不允许出现同名的。
实参是相对于形参而言的,形参是实际值的“替身”,这个替身所代表的实际值即为实参。实际值可以是一个具体的值,也可以是一个变量

值参数是通过将实参的值复制到形参。来实现将值传递到方法,也就是所谓的按值传递,当方法被调用是,CLR做如下操作:
①在托管栈堆中为形参分配空间 ②将实参的值复制到形参
其中,在值参数中,实参也可以是任何计算结果满足类型要求的表达式,不一定是变量。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
黑马-张扬 发表于 2012-12-4 15:03
就为这点事多搞出个关键字来?不麻烦吗?按理说程序语言的设计原则不是越少关键字月号码
...

这个应该不一定把,越少不一定优化就越好
回复 使用道具 举报
值参数
        当利用值向方法传递参数时, 编译程序给实参的值做一份拷贝, 并将此拷贝传递给该方法.  被调用的方法不会修改内存中实参的值, 所以使用 值参数时 , 可以保证实际值是安全的, 在调用方法时 ,如果形式化参数的类型是值参数的话,  调用的实参的表达式必须保证是正确的值表达式


引用型参数  

        和值参不同的是 , 引用型参数并不开辟新的内存区域.  当利用引用型参数向方法传递形参时,编译程序将把实际值在内存中的地址传递给方法.  发方法中,引用型参数通常已经初始化.
        在方法中使用引用型参数,会经常可能导致多个变量名指向同一处内存地址


输出参数

        与引用型参数类似 , 输出型参数也不开辟新的内存区域.  与 引用型参数的差别在于,  调用方法前 无需对变量进行初始化 ,  输出型参数用于传递方法返回的数据.
        out 修饰符后应跟随与形参的类型相同的类型声明. 在方法返回后,  传递的变量被认为经过了初始化.

using System;
        class Test
        {
                static void SplitPath(string path, out string dir, out string name)
                {
                        int i=path.Length;
                        while(i>0)
                        {
                                char ch=path[i-1];
                                if(ch=='\\'||ch=="/"||ch==':')
                                {
                                        break;
                                }
                                i--;
                        }
                        dir=path.Substring(0,i);
                        name=path.Substring(i);
                }

                static void Main()
                {
                        string dir,name;
                        SplitPath("c:\\windows\\system\\hello.txt",dir,name);
                        Console.WriteLine(dir);
                        Console.WriteLine(name);
                }
        }


数组型参数
        如果形参表中包含了数组型参数, 那么他必须在参数表中位于最后.
        参数只允许是一维数组.  如 :  string[]  和string[][]类型都可以作为数组型参数, 而 string[,] 则不能
        数组型参数不能再有 ref 和 out 修饰符

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马