生活随笔
收集整理的這篇文章主要介紹了
方法参数修饰符in,out,ref
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
in,out,ref都可能作為方法參數(shù)據(jù)修飾符,從字面意思可就可以理解這三個關(guān)鍵字的含義,那用法是什么樣子的呢,通過demo來看一下。
定義一個引用類型Order
public class Order
{public?string?OrderNo?{?get;?set;?}public override string ToString(){return OrderNo;}
}
in參數(shù)用法:
Console.WriteLine("in 參數(shù) 只能從外部把值傳入方法內(nèi)部使用");
var i = 10;
InMethod01(in i);
Console.WriteLine($"外:{i}");
//InMethod01(in 10);//錯誤,in后不能是實(shí)際的數(shù)據(jù)//可以直接傳入數(shù)據(jù)
InMethod01(10);//order內(nèi)的OrderNo傳入方法內(nèi)部有可能被改掉,但order不可以被替換
var order = new Order { OrderNo = "O000000" };
InMethod02(in order);
Console.WriteLine($"外:{order}");
//InMethod02(in new Order { OrderNo = "abcd" });//錯誤,in后不能是實(shí)際的數(shù)據(jù)//可以直接傳入數(shù)據(jù)
InMethod02(new Order { OrderNo = "O000000" });//int i1;
//Order order1;
//InMethod03(in order1 in i1);//錯誤,不能是沒有賦值的變量int i1 = 1;
Order order1 = new Order() { OrderNo = "O000000" };
//方法的參數(shù)列表中可以有多個in
InMethod03(in order1, in i1);//錯誤,不能是沒有賦值的變量InMethod03(new Order { OrderNo = "O000000" }, 20);static void InMethod01(in int i)
{//i = 10;//錯誤Console.WriteLine($"內(nèi):{i}");
}
static void InMethod02(in Order order)
{//order = new Order();//錯誤order.OrderNo = "O000002"; //正確,這里可以參數(shù)成員賦值Console.WriteLine($"內(nèi):{order}");
}
static void InMethod03(in Order order, in int i)
{//i = 10;Console.WriteLine($"內(nèi):{i}");//order = new Order(); //錯誤//order.OrderNo = "O000001"; //正確,這里可以參數(shù)成員賦值Console.WriteLine($"內(nèi):{order}");
}
out參數(shù)用法:
Console.WriteLine("out?參數(shù),是從方法內(nèi)部把數(shù)據(jù)帶出來");//定義調(diào)用一起
OutMethod01(out int i1);
Console.WriteLine($"外 :{i1}");//定義調(diào)用分開
int i2=20; //即使賦值,方法內(nèi)部接收不到
OutMethod01(out i2);
Console.WriteLine($"外 :{i2}");//定義調(diào)用一起
OutMethod02(out Order order1);
Console.WriteLine($"外 :{order1}");//定義調(diào)用分開
Order order2;
OutMethod02(out order2);
Console.WriteLine($"外 :{order2}");//多個out同時存在
OutMethod03(out Order order3, out int i3);
Console.WriteLine($"外 :{order3}");
Console.WriteLine($"外 :{i3}");Order order4;
int i4=20;//這里的20是能傳入OutMethod03中的,但在方法內(nèi)部,不能在給i賦值前使用
OutMethod03(out order4, out i4);
Console.WriteLine($"外 :{order4}");
Console.WriteLine($"外 :{i4}");//帶有out的參數(shù),在方法內(nèi)即使有值,也能不使用,只有賦值后才能使用
static void OutMethod01(out int i)
{//Console.WriteLine(i);//錯誤i = 10;Console.WriteLine(i);
}
static void OutMethod02(out Order order)
{//Console.WriteLine(order); //錯誤order = new Order { OrderNo = "O000001" };Console.WriteLine(order);
}
static void OutMethod03(out Order order, out int i)
{//Console.WriteLine(i);//錯誤//Console.WriteLine(order); //錯誤i = 10;order = new Order { OrderNo = "O000001" };Console.WriteLine(i);//錯誤Console.WriteLine(order); //錯誤
}
ref參數(shù)用法:
Console.WriteLine("ref 參數(shù),即能把外部的數(shù)據(jù)傳入,也能把方法里的參數(shù)變化值傳出,這里更多的是把參數(shù)轉(zhuǎn)成一個引用,穿透方法內(nèi)外共享");//RefMethod01(ref 10);//錯誤,這里只能傳入一個變量,不能是具體的數(shù)據(jù)//int i1;//錯誤,ref要求傳入必須有值
//RefMethod01(ref i1);//錯誤
int i1 = 1;
RefMethod01(ref i1);
Console.WriteLine($"外 :{i1}");var order1 = new Order { OrderNo = "O000000" };
RefMethod02(ref order1);
Console.WriteLine($"外 :{order1}");Order order2 = new Order { OrderNo = "O000000" };
int i2 = 1;
RefMethod03(ref order2, ref i2);
Console.WriteLine($"外 :{order2}");
Console.WriteLine($"外 :{i2}");static void RefMethod01(ref int i)
{Console.WriteLine($"前:{i}");i = 10;Console.WriteLine($"后:{i}");
}
static void RefMethod02(ref Order order)
{Console.WriteLine($"前:{order}");order = new Order { OrderNo = "O000001" };Console.WriteLine($"后:{order}");
}
static void RefMethod03(ref Order order, ref int i)
{Console.WriteLine($"前:{i}");Console.WriteLine($"前:{order}");i = 10;order = new Order { OrderNo = "O000001" };Console.WriteLine($"后:{i}");Console.WriteLine($"后:{order}");
}
總結(jié)
以上是生活随笔為你收集整理的方法参数修饰符in,out,ref的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。