您的位置:澳门新葡8455最新网站 > 编程教学 > C# 方法-参数

C# 方法-参数

发布时间:2019-12-31 04:26编辑:编程教学浏览(101)

    • C# 方法-返回值
    • C# 方法-参数

     我们知道,将值类型作为方法参数的时候,只是复制了一个而已,并不能改变其原来的值,方法执行完,参数的周期就算完了
    ,就会消失了,如果想改变原来的值怎么办的,就比如把引用类型作为参数一样,可以改变原来的值,那是因为它传递过去的
     是一个引用,一个指向同一个对象的引用,所有对象的值会改变,如果想让值类型在传递的过程中,也可以这样,改变原来的值,那么就就必须把值类型当做引用类型来传递,也就是在方法中加入ref关键字来修饰参数,先来看看下面的例子


     

    C# 方法参数的基本结构为:

    图片 1图片 2View Code

    方法名称(参数类型 参数值[, 参数类型 参数值...])

      protected void Page_Load(object sender, EventArgs e)
          {
            int num = 200;
            GetValue(num);
            Label1.Text = num.ToString();
          }
            protected void GetValue(ref int num1)
           {
            num1 = 100;
           }

    输入参数

     如果就是这样的话,上面我们说到只是复制了num作为参数使用,但是原来的num并没有因此而改变,所以在此输入num的值还是以前的的值200,不是100,但是加上ref之后就不一样了

    C# 中方法参数无默认值,可以用重载代替默认值功能。

     

    无修饰符的情况下,参数值始终按值传递,不论传递的参数类型是值类型还是引用类型,而 VB 中默认情况下是按引用传递。

    图片 3图片 4View Code

    也就是说方法对参数值的修改不会影响到方法之外的变量。

    protected void Page_Load(object sender, EventArgs e)
        {
        int num = 200;
        GetValue(ref num);
        Label1.Text = num.ToString();
        }
        protected void GetValue(ref int num1)
        {
        num1 = 100;
        }

    质疑:既然是按值传递,为什么我在传递一个对象时,对该对象的修改影响到了外部的对象?

    这样的值就改变num的值,就是100了,总得来说就是把值类型转换成引用类型作为参数传递了,可以改变原来的值
     还有另外一个修饰符out,这个主要是用来输出的,确切的说ref和out传递的都是地址,但是唯一的区别就是ref重点的将值传入到方法内,而out则注重于输出,不用初始化,看看下面的例子就明白了

    强调一遍,不论是值类型还是引用类型,默认都是按值传递的。对于引用类型,传递时,复制的是引用地址,并不是复制的引用地址的数据,所以方法体内对引用地址数据的修改影响到了方法外的地址数据。

     

    string 是个特例,尽管是引用类型,仍按值类型的形式传递。

    图片 5图片 6View Code

    引用参数

    using System;
        namespace ParameterOutSample3_4
        {
            class AddClass
            {
            public static void Add(int x, int y, out int z)
            {
                z = x + y;
            }
            }
        class MyClass
            {
            public static void Main()
            {
                int a = 13, b = 19, c; //c未初始化
            AddClass.Add(a, b, out c);
                Console.WriteLine("a+b={0}", c);
            }
            }
        }

    我们可以通过方法返回值,有时需要返回多个值时,利用引用参数较为方便。

    有时候使用out和ref可以实现相同的功效,最大的区别就在于out重在输出,不把具体的值传递到方法内,在方法外,不用赋值,而ref就重在输入,需要在方法外初始化!

    引用参数如同其它语言中的输入输出参数,调用者必须初始化变量。

    简答总结:

    void Foo(ref int v)
    {
        v = 3;
    }
    void Page_Load(object sender, EventArgs e)
    {
        int n = 0;
        Foo(ref n);
        lb.Text = n.ToString();
    }

        ref与out实现的结果一样,都可以改变原来的值,只是ref需要在方法外赋值,而out不需要在方法外赋值

    显示的结果是 3,而不是 0。

       另外有个简单的用法

    注意,调用时 ref 不可少。

     if (!int.TryParse(Request.Params["id"] as string, out this.Id))
                {

    输出参数

               }

    输出参数功能和引用参数相同,但调用者可以不初始化变量。尽管二者功能相同,也不要混用。

    可以直接赋值判断

    • 引用参数侧重于输入输出,输出参数只能用于输出;
    • 引用参数可以不改变参数值,输出参数必须在方法体中为其赋值。

    void CreateStr(out string str)
    {
        str = "new";
    }
    void Page_Load(object sender, EventArgs e)
    {
        string str;
        CreateStr(out str);
        lb.Text = str;
    }

    注意,调用时 out 不可少。

    尽管 ref 和 out 意义不同,当两方法仅存在 ref 和 out 差别时,将无法实现重载,如下示例将发生错误:

    void Foo(ref int n)
    {
        //
    }
    void Foo(out int n)
    {
        n = 3;
    }

    而下列可以重载:

    void Foo(int n)
    {
        //
    }
    void Foo(ref int n)
    {
        //
    }

    下列也可以重载:

    void Foo(int n)
    {
        //
    }
    void Foo(out int n)
    {
        n = 3;
    }

    • C# 方法-返回值
    • C# 方法-参数

    本文由澳门新葡8455最新网站发布于编程教学,转载请注明出处:C# 方法-参数

    关键词:

上一篇:类域成员和属性,重点知识详解

下一篇:没有了