類型介紹
在幾乎所有的OOP語言中
值類型
引用類型
以C#為例
我想說的
我想說的就是——Ref和Out把我弄糊塗的原因是
對於值類型
使用了Ref和Out的效果就幾乎和C中使用了指針變量一樣
using System;namespace ConsoleApplication
{
/// <summary>
/// </summary>
class Class
{
/// <summary>
/// 應用程序的主入口點
/// </summary>
[STAThread]
static void Main(string[] args)
{
int a =
int b; squareRef(ref a);
squareOut(out b); Console
Console
} static void squareRef(ref int x)
{
x = x * x;
Console
} static void squareOut(out int y)
{
y =
y = y * y;
Console
}
}
}
顯示的結果就是——
這樣的話
對於引用類型
對於引用類型就比較難理解了
先要了解到這一層——就是當一個方法接收到一個引用類型的變量的時候
如圖
有個例子
using System;
using System
using System
using System
using System
using System
namespace RefOut
{
/// <summary>
/// Form
/// </summary>
public class Form
{
private System
private System
/// <summary>
/// 必需的設計器變量
/// </summary>
private System
public Form
{
//
// Windows 窗體設計器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 調用後添加任何構造函數代碼
//
}
/// <summary>
/// 清理所有正在使用的資源
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components
}
}
base
}
#region Windows 窗體設計器生成的代碼
/// <summary>
/// 設計器支持所需的方法
/// 此方法的內容
/// </summary>
private void InitializeComponent()
{
this
this
this
//
// button
//
this
this
this
this
; this
this
this
//
// label
//
this
this
this
this
this
//
// Form
//
this
this
this
this
this
this
this
this
this
}
#endregion
/// <summary>
/// 應用程序的主入口點
/// </summary>
[STAThread]
static void Main()
{
Application
}
private void button
{
int[] firstArray = {
int[] firstArrayCopy = firstArray;
this
this
for(int i =
{
this
}
FirstDouble(firstArray);
this
for(int i=
{
this
}
if(firstArray == firstArrayCopy)
this
else
this
int[] secondArray = {
int[] secondArrayCopy = secondArray;
this
this
for(int i=
{
this
}
SecondDouble(ref secondArray);
this
for(int i=
{
this
}
if(secondArray== secondArrayCopy)
this
else
this
this
for(int i =
{
this
}
this
for(int i=
{
this
}
}
void FirstDouble(int[] array)
{
for(int i =
array[i] *=
array = new int[] {
}
void SecondDouble(ref int[] array)
{
for(int i=
{
array[i] *=
}
array = new int[] {
}
}
}
運行後的結果是
這個就說明了被調用的程序已經改變了原有的Reference
總結
總的說來
使用Ref型參數時
使用Ref和Out時都必須注意
Out更適合用在需要Return多個返回值的地方
From:http://tw.wingwit.com/Article/program/net/201311/13408.html