C# 變量和參數(shù)

        //棧--存儲局部變量和參數(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);
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跨释,隨后出現(xiàn)的幾起案子胸私,更是在濱河造成了極大的恐慌,老刑警劉巖鳖谈,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岁疼,死亡現(xiàn)場離奇詭異,居然都是意外死亡缆娃,警方通過查閱死者的電腦和手機(jī)捷绒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贯要,“玉大人暖侨,你說我怎么就攤上這事〕缟” “怎么了字逗?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宅广。 經(jīng)常有香客問我扳肛,道長,這世上最難降的妖魔是什么乘碑? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮金拒,結(jié)果婚禮上兽肤,老公的妹妹穿的比我還像新娘。我一直安慰自己绪抛,他們只是感情好资铡,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幢码,像睡著了一般笤休。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上症副,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天店雅,我揣著相機(jī)與錄音政基,去河邊找鬼。 笑死闹啦,一個胖子當(dāng)著我的面吹牛沮明,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窍奋,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荐健,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琳袄?” 一聲冷哼從身側(cè)響起江场,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窖逗,沒想到半個月后址否,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滑负,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年在张,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矮慕。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡帮匾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痴鳄,到底是詐尸還是另有隱情瘟斜,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布痪寻,位于F島的核電站螺句,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏橡类。R本人自食惡果不足惜蛇尚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顾画。 院中可真熱鬧取劫,春花似錦、人聲如沸研侣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庶诡。三九已至惦银,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扯俱。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工书蚪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蘸吓。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓善炫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親库继。 傳聞我的和親對象是個殘疾皇子箩艺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容