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 i = 10;//值类型
            int j = 10;//必须初始化
            int k;//不需要初始化
            int[] iarr = { 1, 2, 3, 4 };//引用类型
            SetI(i);//值传递
            SetS(iarr);//引用传递
            SetSI(ref j);//ref
            SetOI(out k);//out
            Console.WriteLine(i);//输出10
            Console.WriteLine(iarr[0]);//输出100
            Console.WriteLine(j);//输出20
            Console.WriteLine(k);//输出100
            Console.ReadKey();
        }
        //值类型不会改变原来的值(创建一个新的副本)【值传递】
        static void SetI(int i)
        {
            i = 20;
        }
        //引用类型,会改变原来的值【引用传递】
        static void SetS(int[] i)
        {
            i[0] = 100;
        }
        //值传递,使用ref迫使使用引用传递,会改变原始的值
        static void SetSI(ref int j)
        {
            j = 20;
        }
        static void SetOI(out int k)
        {
            k = 100;
        }
    }
}