• (C#基础) 方法的参数修饰符


    (C#)方法的参数修饰符

    参数修饰符
    (无)      如果一个参数没有修饰符标记,则认为它将按值传递(pass by value),这意味着被调用的方法收到一份原始数据的副本。
    out     输出参数由被调用的方法赋值,因此它按引用传递(pass by reference),如果被调用的方法没有给输出参数赋值,就会出现编译器错误。
    ref    调用者赋初值,可以由被调用的方法可选的重新赋值(数据也是按引用传递),如果被调用的方法未能给ref参数赋值,也不会有编译器错误。

    params  允许将一组可变数量的参数作为单独的逻辑参数进行传递。方法只能有一个params参数,并且必须是方法的最后一个参数。

    默认的参数传递行为 - 副本传入,按值传递

    如果没有为参数标记参数相关的修饰符,数据的副本就会被传入函数。

    namespace ConsoleApplication1
    {
        class Program
        {
            // 静态方法可以被直接调用(无需对象实例化)
            static int Add(int x, int y)
            {
                int sum = x + y;
                // 调用者传入的是x,y的副本,所以下面的改变不会影响调用者中的x,y值。
                x = 2013;
                y = 213;
                return sum;
            }
    
            static void Main(string[] args)
            {
                int x = 8, y = 18;
                Console.WriteLine("Sum of {0} and {1} is: {2}", x, y, Add(x, y));  //Output:  8, 18, 26
                Console.WriteLine("After call, x is {0}, y is {1}", x, y);         //Output: 8, 18 
                Console.ReadLine();   
            }
        }
    }

    out 修饰符 -输出参数,按引用传值

    带有输出参数(out)的方法在退出方法之前,给参数附一个恰当的值。(否则会产生编译器错误)

    namespace ConsoleApplication1
    {
        class Program
        {
            // 输出参数sum由如下被调用的方法赋值, 本方法无需返回值。
            static void Add(int x, int y, out int sum)
            {
                 sum = x + y;
            }
    
            static void Main(string[] args)
            {
                int x = 8, y = 18;
                // 无需给输出参数赋初始值。
                int sum;
                Add(x, y, out sum); 
                Console.WriteLine("Sum of {0} and {1} is: {2}", x, y, sum);  //Output:  8, 18, 26
                Console.ReadLine();   
            }
        }
    }

    out修饰符有个很好的用途:通过它,调用者只使用一次方法就可以获取多个返回值。

    namespace ConsoleApplication1
    {
        class Program
        {
            // 设置多个输出参数
            static void SimpleMath(int x, int y, out int sum, out int subtract) 
            {
                sum = x + y;
                subtract = x - y; 
            }
    
            static void Main(string[] args)
            {
                int myX = 8, myY = 18;
                // 无需给输出参数赋初始值。
                int mySum, mySubtract;
                SimpleMath(myX, myY, out mySum, out mySubtract);
                Console.WriteLine("Sum of {0} and {1} is: {2}, Subtract is {3}", myX, myY,  mySum, mySubtract);  //Output:  8, 18, 26, -10
                Console.ReadLine();   
            }
        }
    }

    ref 修饰符 - 引用参数,按引用传值

    通过使用引用参数,方法可以对在调用者作用域中声明的不同数据进行操作(改变值),例如排序和交换。

    引用参数(ref修饰)和输出参数(out修饰)的区别在于:

    - 输出参数不需要它们在被传递给方法之前初始化,方法在退出之前必须为输出参数赋值。

    - 引用参数必须在它们被传递给方法之前初始化,因为是传递一个对已存变量的引用。

    namespace ConsoleApplication1
    {
        class Program
        {
            // 设置引用参数
            static void Swap(ref int x, ref int y) 
            {
                int temp = x;
                x = y;
                y = temp; 
            }
    
            static void Main(string[] args)
            {
                // 必须给引用参数赋初始值。
                int myX = 8, myY = 18;
                Console.WriteLine("Before: myX is {0}, myY is {1}", myX, myY);  //Output:  8, 18
                Swap(ref myX, ref myY);
                Console.WriteLine("After: myX is {0}, myY is {1}", myX, myY);  //Output:  18, 8
                Console.ReadLine();   
            }
        }
    }
  • 相关阅读:
    c++ map 的基本操作
    hdu Dragon Balls
    hdu Code Lock
    小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
    将.py脚本打包成.exe
    关于IO同步/异步/阻塞/非阻塞文章
    C++文件操作
    (十)参考教程
    (八)树控件(Tree Control),标签控件(tab control)
    (七)对话框,单选框(radiobox),复选框(checkbox),列表框(ListBox),组合框(CComboBox),水平滚动条(Horizontal scroll bar),微调(旋转)spincontrol,列表视图控件CListCtrl,静态控件static
  • 原文地址:https://www.cnblogs.com/fdyang/p/2911063.html
Copyright © 2020-2023  润新知