//棧--存儲局部變量和參數(shù)的內(nèi)存塊湿滓。
//邏輯上,棧會在函數(shù)進(jìn)入和退出時增加或減少。
static int Factorial(int x) //每一次進(jìn)入這個方法的時候,就在棧上分配一個新的int,而每一次離開這個方法丁眼,就會釋放一個int。
{
if (x == 0) return 1;
return x * Factorial(x - 1);
}
static void Main(string[] args)
{
//堆--保存對象(例如引用類型的實(shí)例)的內(nèi)存塊。
//新創(chuàng)建的對象會分配在堆上并返回其引用将宪。
//程序執(zhí)行過程中,堆就被新創(chuàng)建的對象不斷填充橡庞。.NET運(yùn)行時的垃圾回收器會定期從堆上釋放對象较坛。
StringBuilder ref1=new StringBuilder("obj1");
Console.WriteLine(ref1); //ref1在后續(xù)沒有使用的情況下可立即被垃圾回收器釋放
StringBuilder ref2 = new StringBuilder("obj2");
StringBuilder ref3 = ref2; //此處將ref2的引用復(fù)制給ref3,雖然ref2之后不再使用扒最,但是由于ref3保持著同一個StringBuilder對象的引用丑勤,因此在ref3使用完畢前它不會被垃圾回收器回收
Console.WriteLine(ref3);
//值類型的實(shí)例(和對象的引用)就存儲在變量聲明的地方。
//如果聲明為類的字段或數(shù)組的元素吧趣,則該實(shí)例會存儲在堆上法竞。
//靜態(tài)字段也會存儲在堆上。與分配在堆上的對象(可以被垃圾回收)不同强挫,這些變量一直存活直至應(yīng)用程序域結(jié)束岔霸。
//明確賦值:
//局部變量在讀取之前必須賦值
//使用方法時必須提供函數(shù)的實(shí)際參數(shù)
//運(yùn)行時將自動初始化其他變量(例如字段和數(shù)組元素)。
//以下示例將產(chǎn)生編譯時錯誤
//int x;
//Console.WriteLine(x); //使用了未賦值的局部變量x
//字段和數(shù)組元素會自動初始化為其類型的默認(rèn)值纠拔。
int[] a = new int[3];
Console.WriteLine(a[1]); //0
//默認(rèn)值
//所有類型的實(shí)例都有默認(rèn)值秉剑。
//預(yù)定義的默認(rèn)值是按位取0的內(nèi)存表示的值。
//default關(guān)鍵字可用于獲得任意類型的默認(rèn)值稠诲。
decimal b=default (decimal);
Console.WriteLine(b); //0
//參數(shù)
//使用ref和out修飾符可以控制參數(shù)的傳遞方式
//按值傳遞參數(shù)(默認(rèn)情況)
int c = 8;
Foo1(c); //傳入的是c的副本
Console.WriteLine(c); //c仍等于8
StringBuilder d = new StringBuilder();
Foo2(d); //傳入的是引用d的副本侦鹏,F(xiàn)oo2方法將傳入的參數(shù)賦值為null诡曙,并不會把d也賦值為null
Console.WriteLine(d.ToString()); //test
//ref修飾符
//按引用傳遞參數(shù)
int e = 8;
Foo3(ref e);
Console.WriteLine(e); //9
string f = "apple";
string g = "banana";
Swap(ref f, ref g);
Console.WriteLine(f); //banana
Console.WriteLine(g); //apple
//out修飾符
//與ref參數(shù)一樣,out參數(shù)按引用傳遞
string h, i;
Split("abc def ghi",out h,out i);
Console.WriteLine(h); //abc def
Console.WriteLine(i); //ghi
//從C# 7開始略水,允許在調(diào)用含有out參數(shù)的方法時直接聲明變量
Split("abc def ghi", out string j, out string k);
Console.WriteLine(j);
Console.WriteLine(k);
//使用out參數(shù)的方法時价卤,可使用下劃線來丟棄那些不感興趣的參數(shù)
Split("abc def ghi",out string l, out _); //丟棄第二個out參數(shù)
//params修飾符
//params參數(shù)修飾符只能修飾方法中的最后一個參數(shù),它能夠使方法接受任意數(shù)量的指定類型參數(shù)渊涝。
//參數(shù)類型必須聲明為數(shù)組
int total = Sum(1, 2, 3, 4);
Console.WriteLine(total); //10
//也可將普通的數(shù)組提供給params參數(shù)
int total2 = Sum(new int[] { 1, 2, 3, 4 });
Console.WriteLine(total2); //10
//可選參數(shù)
Foo4(); //20
//命名參數(shù)
Foo5(x: 1, y: 2); //1,2
//也可以寫作
Foo5(y: 2, x: 1); //1,2
//var隱式類型局部變量
//如果編譯器能夠從初始化表達(dá)式中推斷出變量的類型慎璧,就能夠使用var關(guān)鍵字來代替類型聲明
var m= "hello"; //string
var n= 8; //int
}
static void Foo1(int p)
{
p = p + 1;
Console.WriteLine(p);
}
static void Foo2(StringBuilder p)
{
p.Append("test");
p = null;
}
static void Foo3(ref int p)
{
p = p + 1;
Console.WriteLine(p);
}
static void Swap(ref string a,ref string b)
{
string temp = a;
a = b;
b = temp;
}
static void Split(string name,out string firstName,out string lastName)
{
int i = name.LastIndexOf(' ');
firstName = name.Substring(0,i);
lastName=name.Substring(i+1);
}
static int Sum(params int[] ints)
{
int sum = 0;
for (int i = 0; i < ints.Length; i++)
sum += ints[i];
return sum;
}
static void Foo4(int x = 20)
{
Console.WriteLine(x);
}
static void Foo5(int x,int y)
{
Console.WriteLine(x + "," + y);
}
C# 變量和參數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贯要,“玉大人暖侨,你說我怎么就攤上這事〕缟” “怎么了字逗?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長宅广。 經(jīng)常有香客問我扳肛,道長,這世上最難降的妖魔是什么乘碑? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮金拒,結(jié)果婚禮上兽肤,老公的妹妹穿的比我還像新娘。我一直安慰自己绪抛,他們只是感情好资铡,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幢码,像睡著了一般笤休。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上症副,一...
- 文/蒼蘭香墨 我猛地睜開眼荐健,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琳袄?” 一聲冷哼從身側(cè)響起江场,我...
- 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窖逗,沒想到半個月后址否,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡滑负,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年在张,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矮慕。...
- 正文 年R本政府宣布痪寻,位于F島的核電站螺句,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏橡类。R本人自食惡果不足惜蛇尚,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顾画。 院中可真熱鬧取劫,春花似錦、人聲如沸研侣。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽庶诡。三九已至惦银,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扯俱。 一陣腳步聲響...
- 正文 我出身青樓善炫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親库继。 傳聞我的和親對象是個殘疾皇子箩艺,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 傳值參數(shù) 1、值參數(shù)創(chuàng)建變量副本2弄兜、對值參數(shù)的操作永遠(yuǎn)不影響變量的值 傳值參數(shù)——值類型 傳值參數(shù)——引用類型:創(chuàng)...
- 大家可能在編碼中或多或少的使用過out的ref,但是是否注意過他兩的詳細(xì)用法以及區(qū)別视卢? 本文想介紹下詳細(xì)介紹下ou...
- 數(shù)組參數(shù): 參數(shù)數(shù)組: 注: 參數(shù)數(shù)組與數(shù)組參數(shù)的不同踱卵,在于函數(shù)的調(diào)用,調(diào)用參數(shù)數(shù)組的函數(shù)的時候据过,我們可以傳遞過...
- 1.基本概念 堆(Heap)程序可以動態(tài)申請的存儲空間,通過malloc系列函數(shù)分配庸队,全局可訪問积蜻。 棧(Stack...
- c#函數(shù)參數(shù)有四種類型谢澈,分別是:值參數(shù)、引用參數(shù)御板、輸出參數(shù)锥忿、參數(shù)數(shù)組 在了解函數(shù)的參數(shù)之前,我們先來了解什么是實(shí)參...