程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> ref和out的區別,值類型和引用類型的使用,refout

ref和out的區別,值類型和引用類型的使用,refout

編輯:C#入門知識

ref和out的區別,值類型和引用類型的使用,refout


今天剛剛明白ref和out的區別,只限於個人理解如有不同請賜教,謝謝

首先我感覺ref和out是針對於值類型來說,以前一直認為是針對於引用類型看下面的一段代碼

1.首先結果 i=0;ints[0]=0    i=0;ints[0]=100

2.ints作為一個引用類型在傳入方法後,對ints[0]進行了賦值,是將引用類型的地址引用到了100這個值得堆上,

3.而值類型i引入到另外一個方法後進行賦值不會對原有字符串進行改變

4.ref就是為了解決這個問題,讓值類型能夠和引用類型一樣在傳入方法後值會進行改變

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

namespace Demo
{
    class Program
    {
        static void SomeFunction(int[] ints, int i)
        {
            ints[0] = 100;
            i = 100;
        }
        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 3, 4 };
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            SomeFunction(ints, i);
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            Console.ReadKey();
        }
    }
}

  

5.將代碼添加上ref  結果:i=0;int[0]=0;i=100;ints[0]=100

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

namespace Demo
{
class Program
{
static void SomeFunction(int[] ints, ref int i)
{
ints[0] = 100;
i = 100;
}
static void Main(string[] args)
{
int i = 0;
int[] ints = { 0, 1, 2, 3, 4 };
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[0]);
SomeFunction(ints, ref i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[0]);
Console.ReadKey();
}
}
}

所以我認為ref是對值類型的改變而且和out一樣,在進行傳遞參數的時候對變量進行了初始化。

 

而out只是在傳遞參數的時候不用進行賦值,但是在調用的方法裡面必須進行賦值,負責會報沒被賦值的out參數

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

namespace Demo
{
class Program
{
static void SomeFunction(int[] ints, ref int i)
{
ints[0] = 100;
i = 100;
}
static void Main(string[] args)
{
int i = 0;
int[] ints = { 0, 1, 2, 3, 4 };
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[0]);
SomeFunction(ints, ref i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[0]);
Console.ReadKey();
}
}
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved