C#圖解教程筆記20170718

<b>訪問(wèn)修飾符</b>
字段
訪問(wèn)修飾符 類型 標(biāo)識(shí)符;

方法
訪問(wèn)修飾符 返回類型 方法名()
{
、侍瑟、扰肌、
}

<b>五種成員訪問(wèn)控制如下</b>
私有的(private) 私有成員只能從聲明它的類的內(nèi)部訪問(wèn),其他的類不能看見(jiàn)或訪問(wèn)它們氧枣。
公有的(public)
受保護(hù)的(protected)
內(nèi)部的(internal)
受保護(hù)內(nèi)部的(protected internal)

<b>實(shí)例成員</b>:類的每個(gè)實(shí)例都是不同的實(shí)體沐兵,它們有自己的一組數(shù)據(jù)成員,不同于同一類的其他實(shí)例便监,因?yàn)檫@些數(shù)據(jù)成員都和類的實(shí)例相關(guān)扎谎,所以被稱為實(shí)例成員。
<b>靜態(tài)成員</b>:實(shí)例成員是默認(rèn)類型烧董,但也可以聲明與類而不是實(shí)例相關(guān)的成員毁靶,它們被稱為靜態(tài)成員。

<b>方法</b>
本質(zhì)上解藻,方法是一塊具有名稱的代碼老充,可以使用方法的名稱執(zhí)行代碼,也可以把數(shù)據(jù)傳入方法并接收數(shù)據(jù)輸出螟左。
方法是類的函數(shù)成員啡浊,方法有兩個(gè)主要部分觅够,方法頭和方法體
方法頭指定方法的特征,包括:
方法是否返回?cái)?shù)據(jù)巷嚣,如果返回返回什么類型喘先;
方法的名稱;
什么類型的輸入可以傳入方法廷粒。

方法體包含了可執(zhí)行代碼的語(yǔ)句序列窘拯。執(zhí)行從方法體的第一條語(yǔ)句開(kāi)始,一直到方法結(jié)束.

<b>常量</b>
兩個(gè)特征:聲明中必須初始化坝茎;聲明后不能改變涤姊。
常量聲明的語(yǔ)法與變量或字段的聲明相同,除了下面內(nèi)容:
在類型之前增加關(guān)鍵字const嗤放,關(guān)鍵字const不是一個(gè)修飾符思喊,而是核心聲明的一部分,它必須直接放在類型的前面次酌。恨课;
必須有初始化語(yǔ)句。

<b>引用參數(shù)</b>
使用引用參數(shù)是岳服,必須在方法的聲明和調(diào)用中都使用ref修飾符剂公;
實(shí)參必須是變量,在用作實(shí)參前必須被賦值吊宋。如果是引用類型變量纲辽,可以付志偉一個(gè)引用或NULL值。

void MyMethod(ref int val)  //方法聲明
{...}

int y=1;                               //實(shí)參變量
MyMethod(ref y);                //方法調(diào)用
MyMethod(ref 2+3)           //出錯(cuò)璃搜,val必須使用變量

<b>輸出參數(shù)</b>
輸出參數(shù)用于從方法體內(nèi)把數(shù)據(jù)傳出到調(diào)用代碼文兑,它們非常類似引用參數(shù)。它有如下要求:
<li>必須在聲明的調(diào)用中都使用修飾符腺劣,輸出參數(shù)的修飾符是out而不是ref</li>
<li>實(shí)參必須是變量绿贞,不能是其他表達(dá)式類型。</li>

<b>參數(shù)數(shù)組</b>
重點(diǎn):
<li>在一個(gè)參數(shù)列表中只能有一個(gè)參數(shù)數(shù)組橘原。</li>
<li>如果有籍铁,他必須是列表中的最后一個(gè)</li>
聲明一個(gè)參數(shù)數(shù)組必須要做的事:
<li>在數(shù)據(jù)類型前使用params修飾符</li>
<li>在數(shù)據(jù)類型后放置一組空的方括號(hào)</li>

void ListInts(params int[] inVals)
{....}

<li>數(shù)組是一組整齊的相同類型的數(shù)據(jù)項(xiàng)。</li>
<li>數(shù)組使用一個(gè)數(shù)字索引進(jìn)行訪問(wèn)趾断。</li>
<li>數(shù)組是一個(gè)引用類型拒名,因此它的所有數(shù)據(jù)項(xiàng)都保存在堆中</li>

ListInts(10,20,30):              //所有元素必須是方法聲明中指定的類型

int[] intArray={1,2芋酌,3}增显;
ListInts(intArray);               //一個(gè)數(shù)組變量

<li>在聲明中需要修飾符</li>
<li>在調(diào)用中不允許有修飾符</li>

參數(shù)類型 修飾符 是否在聲明時(shí)使用 是否在調(diào)用時(shí)使用 執(zhí)行
無(wú) 系統(tǒng)把實(shí)參的值復(fù)制到形參
引用 ref 形參是實(shí)參的別名
輸出 out 形參是實(shí)參的別名
數(shù)組 params 允許傳遞可變數(shù)目的實(shí)參到方法

<b>棧幀</b>
當(dāng)一個(gè)方法被調(diào)用時(shí),在棧頂分配了一塊內(nèi)存用于保存一定數(shù)量與方法相關(guān)的數(shù)據(jù)項(xiàng)脐帝,這塊內(nèi)存叫方法的棧幀同云。

<ul><li>棧幀含有保存下列內(nèi)容的內(nèi)存:</li>
<ol><li>返回地址——就是方法退出時(shí)在哪兒繼續(xù)執(zhí)行</li>
<li>分配內(nèi)存的參數(shù)——就是方法的值參數(shù)糖权,如果有參數(shù)數(shù)組</li>
<li>與方法調(diào)用相關(guān)的其他各種管理數(shù)據(jù)項(xiàng)</li></ol>
<li>方法被調(diào)用時(shí),它的整個(gè)棧幀被壓入棧中炸站。</li>
<li>方法退出時(shí)星澳,它的整個(gè)棧幀被從棧中彈出。彈出一個(gè)棧幀有事也稱為釋放棧</li>

    class Program
    {
        static void MethodA(int par1,int par2)
        {
            Console.WriteLine("Enter MethodA:{0},{1}",par1,par2);
            MethodB(11, 18);
            Console.WriteLine("Exit MethodA");
        }
        static void MethodB(int par1, int par2)
        {
            Console.WriteLine("Enter MethodB:{0},{1}", par1, par2);
            Console.WriteLine("Exit MethodB");
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Enter Main");
            MethodA(15, 30);
            Console.WriteLine("Exit Main");
            Console.ReadKey();
        }
    }

輸出結(jié)果為:


Enter Main
Enter MethodA:15,30
Enter MethodB:11,18
Exit MethodB
Exit MethodA
Exit Main


棧幀.png

方法重載

一個(gè)類中可以有一個(gè)以上的方法擁有相同的名稱旱易,這叫做方法重載禁偎,使用相同名稱的每個(gè)方法必須有一個(gè)和其他方法不相同的簽名

  • 方法的簽名有下列信息組成,它們?cè)诜椒暶鞯姆椒^中:
  • 方法的名稱阀坏;
  • 參數(shù)的數(shù)目如暖;
  • 參數(shù)的數(shù)據(jù)類型和順序;
  • 參數(shù)修飾符忌堂;
  • 返回類型不是簽名的一部分装处,而認(rèn)為它是簽名的一部分是一種常見(jiàn)的錯(cuò)誤。
  • 形參的名稱也不是簽名的一部分浸船。
    例:
class A
{
long Add(int a,int b)        {return a+b;}
long Add(int a,int b,int c)  {return a+b+c;}
long Add(float a,float b)    {return a+b;}
long Add(long a,long b)      {return a+b;}
}


類進(jìn)階

實(shí)例類成員
改變一個(gè)實(shí)例的字段拷貝的值不影響其他實(shí)例的拷貝的值

class D
{
   public in num1;
}
class Program
{
   static void Main()
  {
   D d1=new D();
   D d2=new D();
   d1.num1=10;d2.num1=25;
   Console.WriteLine("d1={0},d2={1}",d1.num1,d2.num1)
  }
}

輸出結(jié)果


d1=10,d2=25


靜態(tài)字段被類的所有實(shí)例共享,所有實(shí)例都訪問(wèn)同意內(nèi)存位置寝蹈,所以李命,如果該內(nèi)存位置的值被一個(gè)實(shí)例改變了,這種改變對(duì)所有的實(shí)例都可見(jiàn)箫老。

class D
    {
        int num1;
        static int num2;
        public void SetVars(int v1, int v2)//設(shè)置值
        { num1 = v1; num2 = v2; }
        public void DisPlay(string str)    //顯示值
        { Console.WriteLine("{0}:num1={1},num2={2}",str,num1,num2); }
    }
    class Program
    {
        static void Main()
        {
            D d1 = new D();
            D d2 = new D();//創(chuàng)建兩個(gè)實(shí)例

            d1.SetVars(2, 4);//設(shè)置d1的值
            d1.DisPlay("d1");

            d2.SetVars(22,14);//設(shè)置d2的值
            d2.DisPlay("d2");

            d1.DisPlay("d1");//再次顯示d1

            Console.ReadKey();
        }
    }

輸出結(jié)果為:


d1:num1=2,num2=4
d2:num1=22,num2=14
d1:num1=2,num2=14


實(shí)例成員在實(shí)例被創(chuàng)建時(shí)開(kāi)始存在封字,當(dāng)實(shí)例被銷毀時(shí)停止存在。然而耍鬓,靜態(tài)成員及時(shí)沒(méi)有類的實(shí)例也存在并可以訪問(wèn)阔籽。
例:

class D
    {
        int num1;
        static public int num2;
        
    }
    class Program
    {
        static void Main()
        {
            D.num2 = 4;//沒(méi)有實(shí)例化
            Console.WriteLine("num2={0}",D.num2);
            Console.ReadKey();
        }
    }

輸出結(jié)果


num2=4


靜態(tài)函數(shù)成員

  • 同靜態(tài)字段一樣,靜態(tài)函數(shù)成員獨(dú)立于任何類實(shí)例牲蜀。即使沒(méi)有類的實(shí)例笆制,仍可以調(diào)用靜態(tài)方法。
  • 靜態(tài)函數(shù)成員不能訪問(wèn)實(shí)例成員涣达。然而在辆,它們能訪問(wèn)其它靜態(tài)成員。

成員常量

  • 聲明在類聲明中度苔;
  • 不能再常量成員聲明以后給他賦值匆篓;
  • 成員常量對(duì)類的每個(gè)實(shí)例都是可見(jiàn)的,及時(shí)沒(méi)有類的實(shí)例它們也可以使用寇窑;
  • 常量在內(nèi)存中沒(méi)有自己的儲(chǔ)存位置鸦概,而是在編譯時(shí)被編譯器替換。(ps:我一直以為是和值類型一樣放在棧中呢( ̄▽ ̄)/)甩骏;

屬性
就像字段窗市,屬性有如下特征:

  • 它是命名的類成員先慷;
  • 它有類型;
  • 他可以被賦值和讀冉魃琛熟掂;
    然而和字段不同的是,屬性是一個(gè)函數(shù)成員扎拣。
  • 他不為數(shù)據(jù)儲(chǔ)存分配內(nèi)存赴肚;
  • 它執(zhí)行代碼;
    屬性是指定的一組兩個(gè)匹配的二蓝,稱為訪問(wèn)器的方法
  • set訪問(wèn)器用于為屬性賦值誉券;
  • get訪問(wèn)器用于從屬性取值。
image.png

屬性本身沒(méi)有任何儲(chǔ)存刊愚,訪問(wèn)器決定如何處理發(fā)進(jìn)來(lái)的數(shù)據(jù)踊跟,以及什么數(shù)據(jù)應(yīng)該被發(fā)送出去,屬性使用一個(gè)字段做儲(chǔ)存
set訪問(wèn)器接受他的輸入?yún)?shù)value鸥诽,并把他的值賦值給字段
get訪問(wèn)器只是返回字段的值


image.png

使用屬性
寫(xiě)入和讀取屬性的方法與訪問(wèn)字段一樣商玫,訪問(wèn)器被隱式調(diào)用

int MyvAalue       //屬性聲明
{
  set{...}
  get{...}
}
...
MyvAalue=5;    //賦值隱式調(diào)用set方法
z=MyvAalue;    //表達(dá)式:隱式調(diào)用get方法

屬性和關(guān)聯(lián)字段

image.png

只有g(shù)et訪問(wèn)器的屬性稱為只讀屬性。
只有set訪問(wèn)器的屬性稱為只寫(xiě)屬性牡借。
兩個(gè)訪問(wèn)器至少要有一個(gè)必須定義拳昌,否則編譯器會(huì)產(chǎn)生一條錯(cuò)誤信息。

靜態(tài)屬性和
屬性也可以聲明為static钠龙,靜態(tài)屬性的訪問(wèn)器和所有靜態(tài)成員一樣:

  • 不能訪問(wèn)類的實(shí)例成員——雖然它們能被實(shí)例成員訪問(wèn)炬藤。
  • 存在,不管類是否有實(shí)例碴里;
  • 當(dāng)從類的外部訪問(wèn)時(shí)沈矿,必須使用類名引用,而不是實(shí)例名咬腋。


    image.png

實(shí)例構(gòu)造函數(shù)
實(shí)例構(gòu)造函數(shù)是一個(gè)特殊的方法羹膳,他在類的每個(gè)新實(shí)例創(chuàng)建的時(shí)候執(zhí)行。

  • 構(gòu)造函數(shù)用于初始化類實(shí)例的狀態(tài)根竿;
  • 如果希望能從類的外部創(chuàng)建類的實(shí)例溜徙,需要聲明構(gòu)造函數(shù)為public;
  • 構(gòu)造函數(shù)的名稱和類名相同犀填。
  • 構(gòu)造函數(shù)不能有返回值蠢壹。


    image.png

靜態(tài)構(gòu)造函數(shù)
構(gòu)造函數(shù)也可以聲明為static,通常靜態(tài)構(gòu)造函數(shù)初始化類的靜態(tài)字段
靜態(tài)構(gòu)造函數(shù)在下列方面和實(shí)例構(gòu)造函數(shù)不同:

  • 靜態(tài)構(gòu)造函數(shù)聲明中使用static關(guān)鍵字。
  • 類智能有一個(gè)靜態(tài)構(gòu)造函數(shù)九巡,而且不能帶有參數(shù)图贸。
  • 靜態(tài)構(gòu)造函數(shù)不能有訪問(wèn)修飾符。
class Class1()
    { 
               static Class1()
              {
                   ...                            //靜態(tài)構(gòu)造函數(shù)的函數(shù)體
               }
     ...
     }

類既可以有靜態(tài)構(gòu)造函數(shù)也可以有實(shí)例構(gòu)造函數(shù)。

靜態(tài)構(gòu)造函數(shù)示例:

class RandomNumber
    {
        private static Random RandomKey;//私有靜態(tài)字段
        static RandomNumber()//靜態(tài)構(gòu)造函數(shù)
        {
            RandomKey = new Random();//初始化

        }
        public int GetRandomNumber()
        {
            return RandomKey.Next();
        }
    }
    class Program
    {
        static void Main()
        {
            
                RandomNumber a = new RandomNumber();
                RandomNumber b = new RandomNumber();
                Console.WriteLine(a.GetRandomNumber());
                Console.WriteLine(b.GetRandomNumber());
            
            
            Console.ReadKey();
        }
    }

輸出結(jié)果為:
728118870
1501976979


析構(gòu)函數(shù)

  • 每個(gè)類只能有一個(gè)西溝函數(shù)疏日;
  • 析構(gòu)函數(shù)不能帶參數(shù)偿洁;
  • 析構(gòu)函數(shù)不能帶訪問(wèn)修飾符;
  • 析構(gòu)函數(shù)和類有相同的名稱沟优,但以一個(gè)“~”字符做前綴涕滋;
  • 析構(gòu)函數(shù)只能對(duì)類的實(shí)例起作用,因此沒(méi)有靜態(tài)析構(gòu)函數(shù)挠阁;
  • 不能在代碼中顯示的調(diào)用析構(gòu)函數(shù)宾肺,相反,他在垃圾收集過(guò)程中調(diào)用侵俗,當(dāng)成垃圾收集器分型代碼锨用,并確定在代碼中沒(méi)有任何途徑引用該對(duì)象。
    例:
Class1
{
   ~Class1()
  {
       cleanuoCode;
  }
...
}
  • 如果不需要就不要執(zhí)行析構(gòu)函數(shù)隘谣,它們會(huì)帶來(lái)性能上的開(kāi)銷增拥。
  • 西溝函數(shù)直營(yíng)釋放對(duì)象自己的外部資源,他不應(yīng)該訪問(wèn)其它的對(duì)象寻歧,應(yīng)為無(wú)法假定這些對(duì)象還有沒(méi)有被收集掌栅。

析構(gòu)函數(shù)本質(zhì)上是Dispose代碼的子集。

redonly修飾符
字段可以用redonly修飾符聲明码泛,其作用類似于聲明一個(gè)字段為const猾封,一但值被設(shè)定就不能改變

this關(guān)鍵字
this關(guān)鍵字在類中使用,是對(duì)當(dāng)前實(shí)例的引用弟晚。它只能被用在下列類成員的代碼塊中:

  • 實(shí)例構(gòu)造函數(shù);
  • 實(shí)例方法;
  • 屬性和索引的實(shí)例訪問(wèn)器
    this被用于下列目的:
  • 用于區(qū)分類的成員和本地變量,或參數(shù)逾苫。
  • 作為調(diào)用方法的實(shí)參卿城。

索引

image.png

索引是一組get和set訪問(wèn)器,類似于屬性的訪問(wèn)器铅搓。

string this [int index]
{
  set{SetAccessorCode}
  get{GetAccessorCode}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瑟押,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子星掰,更是在濱河造成了極大的恐慌多望,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氢烘,死亡現(xiàn)場(chǎng)離奇詭異怀偷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)播玖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門椎工,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事维蒙£溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵颅痊,是天一觀的道長(zhǎng)殖熟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)斑响,這世上最難降的妖魔是什么菱属? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮恋捆,結(jié)果婚禮上照皆,老公的妹妹穿的比我還像新娘。我一直安慰自己沸停,他們只是感情好膜毁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著愤钾,像睡著了一般瘟滨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上能颁,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天杂瘸,我揣著相機(jī)與錄音,去河邊找鬼伙菊。 笑死败玉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镜硕。 我是一名探鬼主播运翼,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兴枯!你這毒婦竟也來(lái)了血淌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤财剖,失蹤者是張志新(化名)和其女友劉穎悠夯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體躺坟,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沦补,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咪橙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片策彤。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栓袖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出店诗,到底是詐尸還是另有隱情裹刮,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布庞瘸,位于F島的核電站捧弃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏擦囊。R本人自食惡果不足惜违霞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞬场。 院中可真熱鬧买鸽,春花似錦、人聲如沸贯被。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)彤灶。三九已至看幼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幌陕,已是汗流浹背诵姜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搏熄,地道東北人棚唆。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像心例,于是被迫代替她去往敵國(guó)和親宵凌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 類是一個(gè)重要的C#編程概念契邀,它在一個(gè)單元內(nèi)定義了表示和行為摆寄。類提供了面向?qū)ο缶幊毯兔嫦蚪M件編程所需的語(yǔ)言支持失暴,是創(chuàng)...
    CarlDonitz閱讀 816評(píng)論 0 2
  • 重新系統(tǒng)學(xué)習(xí)下C++坯门;但是還是少了好多知識(shí)點(diǎn);socket逗扒;unix古戴;stl;boost等矩肩; C++ 教程 | 菜...
    kakukeme閱讀 19,824評(píng)論 0 50
  • 前言 人生苦多现恼,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin叉袍? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,161評(píng)論 9 118
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,511評(píng)論 1 51
  • (>_<) 人都有郁悶的時(shí)候始锚,如何讓煩悶的心情得到釋放,這卻很難喳逛!
    黃思明閱讀 230評(píng)論 0 2