关键字:this、ref、out

Class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Class1
    {
        private string name;
        public Class1(string name)
        {
            // 使用this关键字表明使用当前对象的属性(或方法),后面的name是形参name
            this.name = name;
        }
        public void Eat()
        {
            Console.WriteLine("名字:" + this.name);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 使用类
            Class1 myname = new Class1("namejr");
            myname.Eat();
        }
    }
}

 使用ref关键字进行引用传参

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int age = 4;
            // 关键字ref按引用传参
            Growth(ref age);
            Console.WriteLine(age);
        }
        // 该static是int类型的++,相当于值类型
        static void Growth(ref int age)
        {
            age++;
            Console.WriteLine("int又长大一岁!!!");
        }
    }
}

使用out关键字做引用传递

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int age = 4;
            // 关键字out按引用传参
            // out可以返回多个属性值,而return只能返回一个
            int prev_a, next_a;  // 用来接收上一年和下一年的年龄
            Growth(age, out prev_a, out next_a);
            Console.WriteLine("上一年的年龄:" + prev_a);
            Console.WriteLine("明年的年龄:" + next_a);
        }
        // 使用out关键字,也用来做引用传递
        static void Growth(int age, out int prevage, out int nextage)
        {
            prevage = age - 1;
            nextage = age + 1;
        }
    }
}

值得注意的是:ref、out都是引用传递,使用的方法在值传递的前面加上ref/out即可;在使用ref前必须对ref所引用的变量进行赋值,否则会报错,out可以不在引用前赋值,但必须在离开方法前赋值。

 修改:

关于值传递和引用传递:https://www.cnblogs.com/namejr/p/10261486.html

原文地址:https://www.cnblogs.com/namejr/p/10260959.html