zoukankan      html  css  js  c++  java
  • C# 关键字ref 和out 的详细区别

    refout 的详细区别

    refout都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。

    对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。

    总结起来,他们有如下语法区别:

    1ref传进去的参数必须在调用前初始化,out不必,即:
    int i;
    SomeMethod( ref i );//语法错误
    SomeMethod( out i );//通过

    2ref传进去的参数在函数内部可以直接使用,而out不可:
    public void SomeMethod(ref int i)
    {
       int j=i;//通过
       //...
    }
    public void SomeMethod(out int i)
    {
       int j=i;//语法错误

    }


    3ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值。

    ref在参数传递之前必须初始化;而out则在传递前不必初始化,且在 ... 值类型与引用类型之间的转换过程称为装箱与拆箱。


    总结:
    应该说,系统对ref的限制是更少一些的。out虽然不要求在调用前一定要初始化,但是其值在函数内部是不可见的,也就是不能使用通过out传进来的值,并且一定要在函数内赋一个值。或者说函数承担初始化这个变量的责任。


    数组型参数:以params修饰符声明。

    params关键字用来声明可变长度参数列表。方法声明中只能包含一个params参数,并且只能放在参数列表的最后

    Public void F( int n, params int[ ] args )

    { …… }


    参考代码:

    Demo
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace Con_1
    {
        
    class Class1
        {
            
    static void Main(string[] args)
            {
                
    int n1 = 5;
                MyFun(n1); 
    //一、普通方法
                Console.WriteLine(n1);

                
    int n2 = 5;
                MyRef(
    ref n2); //二、带ref参数的方法
                Console.WriteLine(n2);

                
    int n3 = 5;
                MyOut(
    out n3); //三、带out参数的方法
                Console.WriteLine(n3);

                MyParams(
    "xg"1122); //四、带params参数的方法
                MyParams("xg",11223344);
            }
            
    //一、普通方法
            public static void MyFun(int i)
            {
                i 
    = i + 5;
            }
            
    //二、带ref参数的方法
            public static void MyRef(ref int i)
            {
                i 
    = i + 5;
            }
            
    //三、带out参数的方法
            public static void MyOut(out int i)
            {
                i 
    = 5 + 5;
            }

            
    //四、带params参数的方法
            
    // params 参数对应的是一个一维数组: int、string等
            
    // 在方法的参数列表中只能有一个params 参数
            
    // 当有多个参数时,params 参数必须放在参数列表的最后
            public static void MyParams(string str,params int[] arr)
            {
                
    foreach(int n in arr)
                {
                   Console.WriteLine(n);
                }
            }
        }
    }


  • 相关阅读:
    类型“System.Windows.Markup.IUriContext”在未被引用的程序集中定义 解决办法
    c# 根据文件流查看文件真实格式
    WPF ListBoxItem 使用Command命令添加双击事件
    MVVM 在使用 ItemsSource 之前,项集合必须为空
    WPF 自定义TextBox,可控制键盘输入内容
    百万数据如何在前端快速流畅显示?
    NodeJS npm 包装包失败的解决方案
    node.js express 4.x 安装指南(Express不是内部或外部命令解决方案)
    IIS8 不能在此路径中使用此配置节。如果在父级别上锁定了该节
    Npoi操作excel
  • 原文地址:https://www.cnblogs.com/xugang/p/1684088.html
Copyright © 2011-2022 走看看