.Net基礎(chǔ)09 (面向?qū)ο?

編程思想.png

在面向?qū)ο缶幊趟枷胫安昀铮蟛糠终Z言的編程思想都是面向過程哀托。

面向過程

經(jīng)典例子
把大象塞進(jìn)冰箱里
1缺脉、打開冰箱門
2痪欲、把大象塞進(jìn)去,親下大象的屁股
3攻礼、關(guān)閉冰箱門
打開----> 塞---->關(guān)閉
面向過程:面向的是完成這件事兒的過程业踢,強調(diào)的是完成這件事兒的動作。

小明 瘦小 矮 小屌絲
小明踩著小板凳打開冰箱門
小明找翟盼盼幫忙把大象塞進(jìn)冰箱里,孫全踩著板凳去親。
小明踩著板凳關(guān)閉冰箱門

小剛 190cm 非常大力氣
1、小剛自己就能打開冰箱門
2、小剛自己將大象塞進(jìn)冰箱里剧浸,翟可以自己親一下。
3、小剛自己關(guān)閉冰箱門

如果我們用面向過程的思想來解決這件事兒驰弄,當(dāng)執(zhí)行這件事的人的不同的時候,
我們需要為每個不同的人量身定做解決事情的方法绣的。

面向?qū)ο?/p>

面向?qū)ο螅赫覀€對象幫你做事兒叠赐。
把大象塞進(jìn)冰箱里
我們把冰箱作為對象:
1欲账、冰箱門可以被打開
2、大象可以被塞進(jìn)冰箱里
3芭概、冰箱門可以被關(guān)閉

面向?qū)ο螅阂庠趯懗鲆粋€通用的代碼赛不,屏蔽差異。
以關(guān)門為例
關(guān)門
面向過程:關(guān)門
張三 一腳把門踹緊了
李四 輕輕的把門帶上了
王五 門沒關(guān)嚴(yán)罢洲,留了個尾巴

面向?qū)ο螅宏P(guān)門
門可以被關(guān)閉

對象的描述

我們在代碼中描述一個對象踢故,通過描述這個對象的屬性方法
對象必須是看得見摸得著的惹苗。

燈:屬性和方法
屬性:
外形:長的
亮度:500W
顏色:白色
牌子:XX
方法:發(fā)光

我們把具有相同屬性和相同方法的對象進(jìn)行進(jìn)一步的封裝殿较,抽象出來 類這個概念。
類就是個模子桩蓉,確定了對象應(yīng)該具有的屬性和方法淋纲。
對象是根據(jù)類創(chuàng)建出來的。

  • 1院究、語法:
    [public] class 類名
    {
    字段;
    屬性;
    方法;
    }

寫好了一個類之后洽瞬,我們需要創(chuàng)建這個類的對象,
那么业汰,我們管創(chuàng)建這個類的對象過程稱之為類的實例化伙窃。
使用關(guān)鍵字 new.

this:表示當(dāng)前這個類的對象。
類是不占內(nèi)存的样漆,而對象是占內(nèi)存的为障。

  • 2、添加類的方法
添加類 方法1.png
添加類 方法2.png
添加類 方法2.png

以上兩種方法任意一種就好

*3氛濒、 代碼說明

創(chuàng)建一個Person類

namespace _01面向?qū)ο?{
    public class Person
    {
        //字段名加下劃線
        public string _name;
        public int _age;
        public char _gender;
        //非靜態(tài)方法
        public void CHLSS()
        {
            Console.WriteLine("我叫{0} 性別{1} 今年{2} 可以吃喝拉撒喲",this._name,  this._gender, this._age);
        }
    }
}

在Main()函數(shù)里調(diào)用

class Program
{
    static void Main(string[] args)
    {
        //創(chuàng)建Person類的對象
        Person xiaoMing = new Person();
        xiaoMing._name = "小明";
        xiaoMing._age = 18;
        xiaoMing._gender = '男';
        xiaoMing.CHLSS();
        Console.ReadKey();
    }
}

輸出結(jié)果


輸出結(jié)果.png

現(xiàn)在 讓我們來修改一下Main()函數(shù)中产场,對字段的賦值,再來看下輸出結(jié)果舞竿。

class Program
{
    static void Main(string[] args)
    {
        //創(chuàng)建Person類的對象
        Person xiaoMing = new Person();
        xiaoMing._name = "小明";
        xiaoMing._age = -18;
        xiaoMing._gender = '豬';
        xiaoMing.CHLSS();
        Console.ReadKey();
    }
}
輸出結(jié)果.png

這結(jié)果就讓人尷尬了 京景。。骗奖。确徙。。执桌。 ┑( ̄Д  ̄)┍ 性別豬是什么鬼鄙皇??仰挣?可以看出現(xiàn)在并沒有什么可以限制字段對非法值的設(shè)定伴逸。這就需要屬性,來保護(hù)字段膘壶。

屬性

先上點解釋:
屬性的作用就是保護(hù)字段错蝴、對字段的賦值和取值進(jìn)行限定洲愤。
屬性的本質(zhì)就是兩個方法,一個叫get()一個叫set()顷锰。
既有g(shù)et()也有set()我們誠之為可讀可寫屬性柬赐。
只有g(shù)et()沒有set()我們稱之為只讀屬性
沒有g(shù)et()只有set()我們稱之為只寫屬性

改下代碼

namespace _01面向?qū)ο?{
    public class Person
    {
        //字段名加下劃線 
        private string _name;
        public string Name
        {
            //當(dāng)你輸出屬性取值的時候 會執(zhí)行g(shù)et方法
            get { return _name; }
            //當(dāng)你給屬性賦值的時候 首先會執(zhí)行set方法
            set { _name = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set {
                if (value < 0 || value > 100)
                {
                    value = 0;
                }
                _age = value; }
        }

        private char _gender;
        public char Gender
        {
            get {
                if (_gender != '男' && _gender != '女')
                {
                    _gender = '男';
                }
                return _gender; }
            set { _gender = value; }
        }

        //非靜態(tài)方法
        public void CHLSS()
        {
            Console.WriteLine("我叫{0} 性別{1} 今年{2} 可以吃喝拉撒喲",this.Name,  this.Gender, this.Age
                );
        }
    }
}

1、value 就是當(dāng)前你要設(shè)定的值
2官紫、將字段用訪問修飾符 private 保護(hù)起來
private:私有的肛宋,只能在當(dāng)前類的內(nèi)部進(jìn)行訪問,出了這個類就訪問不到了束世。
3酝陈、訪問屬性 本質(zhì)上就是訪問字段

輸出結(jié)果.png

還是原來的賦值代碼,但是輸出結(jié)果已經(jīng)顯示正常了

靜態(tài)和非靜態(tài)的區(qū)別

1)良狈、在非靜態(tài)類中后添,既可以有實例成員,也可以有靜態(tài)成員薪丁。
2)遇西、在調(diào)用實例成員的時候,需要使用對象名.實例成員;
在調(diào)用靜態(tài)成員的時候严嗜,需要使用類名.靜態(tài)成員名;

namespace _01靜態(tài)和非靜態(tài)的區(qū)別
{
    public class Person
    {
        private static string _name;
        private char _gendeer;

        public static string Name
        {
            get
            {
                return Person._name;
            }

            set
            {
                Person._name = value;
            }
        }

        public char Gendeer
        {
            get
            {
                return _gendeer;
            }

            set
            {
                _gendeer = value;
            }
        }

        //非靜態(tài)方法
        public void M1()
        {
            Console.WriteLine("我是非靜態(tài)方法");
        }
       
        //靜態(tài)方法
        public static void M2()
        {
            Console.WriteLine("我是靜態(tài)方法");
        }
    }
}
namespace _01靜態(tài)和非靜態(tài)的區(qū)別
{
    class Program
    {
        static void Main(string[] args)
        {
            //調(diào)用實例成員
            Person p1 = new Person();
            p1.M1();//實例方法

            //調(diào)用靜態(tài)成員
            Person.M2();//靜態(tài)方法

            Console.ReadKey(); 
        }
    }
}

總結(jié):

  • 靜態(tài)成員必須使用類名去調(diào)用粱檀,而實例成員使用對象名調(diào)用。
  • 靜態(tài)函數(shù)中漫玄,只能訪問靜態(tài)成員茄蚯,不允許訪問實例成員。
  • 實例函數(shù)中睦优,既可以使用靜態(tài)成員渗常,也可以使用實例成員。
  • 靜態(tài)類中只允許有靜態(tài)成員汗盘,不允許出現(xiàn)實例成員皱碘。

使用:
1)、如果你想要你的類當(dāng)做一個"工具類"去使用隐孽,這個時候可以考慮將類寫成靜態(tài)的癌椿。
2)、靜態(tài)類在整個項目中資源共享菱阵。只有在程序全部結(jié)束之后踢俄,靜態(tài)類才會釋放資源。

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

作用:幫助我們初始化對象(給對象的每個屬性依次的賦值)
構(gòu)造函數(shù)是一個特殊的方法:
1)晴及、構(gòu)造函數(shù)沒有返回值都办,連void也不能寫。
2)、構(gòu)造函數(shù)的名稱必須跟類名一樣脆丁。

類當(dāng)中會有一個默認(rèn)的無參數(shù)的構(gòu)造函數(shù)世舰,當(dāng)你寫一個新的構(gòu)造函數(shù)之后,不管是有參數(shù)的還是無參數(shù)的槽卫,那個默認(rèn)的無參數(shù)的構(gòu)造函數(shù)都被干掉了。

創(chuàng)建對象(即new 的時候)的時候會執(zhí)行構(gòu)造函數(shù)胰蝠。

new關(guān)鍵字

Person zsPerson=new Person();
new幫助我們做了3件事兒:
1)歼培、在內(nèi)存中開辟一塊空間
2)、在開辟的空間中創(chuàng)建對象
3)茸塞、調(diào)用對象的構(gòu)造函數(shù)進(jìn)行初始化對象

namespace _02面向?qū)ο缶毩?xí)
{
    class Student
    {
        //字段躲庄、屬性、方法钾虐、構(gòu)造函數(shù)

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



        //當(dāng)程序結(jié)束的時候  析構(gòu)函數(shù)才執(zhí)行
        //幫助我們釋放資源
        //GC Garbage Collection
        //~Student()
        //{
        //    Console.WriteLine("我是析構(gòu)函數(shù)");
        //}


        public Student(string name, int age, char gender, int chinese, int math, int english)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
            this.Chinese = chinese;
            this.Math = math;
            this.English = english;
        }
        ////public Student(string name, int chinese, int math, int english) : this(name, 0, 'c', chinese, math, english)
        ////{
        ////    //this.Name = name;
        ////    //this.Chinese = chinese;
        ////    //this.Math = math;
        ////    //this.English = english;
        ////}
        public Student(string name, int age, char gender)
        {
            this.Name = name;
            if (age < 0 || age > 100)
            {
                age = 0;
            }
            this.Age = age;
            this.Gender = gender;
        }

        //public Student()
        //{

        //}



        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private int _age;
        public int Age
        {
            get { return _age; }
            set
            {
                if (value < 0 || value > 100)
                {
                    value = 0;
                }
                _age = value;
            }
        }
        private char _gender;
        public char Gender
        {
            get
            {
                if (_gender != '男' && _gender != '女')
                {
                    return _gender = '男';
                }
                return _gender;
            }
            set { _gender = value; }
        }
        private int _chinese;
        public int Chinese
        {
            get { return _chinese; }
            set { _chinese = value; }
        }
        private int _math;
        public int Math
        {
            get { return _math; }
            set { _math = value; }
        }
        private int _english;
        public int English
        {
            get { return _english; }
            set { _english = value; }
        }


        public void SayHello()
        {
            Console.WriteLine("我叫{0},我{1}歲了噪窘,我是{2}生", this.Name, this.Age, this.Gender);
        }

        public void ShowScore()
        {
            Console.WriteLine("我叫{0},我的總成績是{1}效扫,平均成績是{2}", this.Name, this.Chinese + this.Math + this.English, (this.Chinese + this.Math + this.English) / 3);
        }
    }
}
namespace _02面向?qū)ο缶毩?xí)
{
    class Program
    {
        static void Main(string[] args)
        {
            //重載
            Student s1 = new Student("李四", 100, '男');
            Console.ReadKey();

            //構(gòu)造函數(shù)
            Student xlStudent = new Student("小蘭", 16, '女', 50, 50, 50);

            xlStudent.SayHello();
            xlStudent.ShowScore();
            Console.ReadKey();

            //Student s = new Student();
            //s.Name = "張三'";
            //s.Age = 18;
            //s.Gender = '中';
            //s.Chinese = 100;
            //s.Math = 90;
            //s.English = 90;
            //s.SayHello();
            //s.ShowScore();

            //Console.ReadKey();
        }
    }
}

this 關(guān)鍵字

1)倔监、代表當(dāng)前類的對象
2)、在類當(dāng)中顯示的調(diào)用本類的構(gòu)造函數(shù) :this


往期回顧

圖文無關(guān).png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菌仁,一起剝皮案震驚了整個濱河市浩习,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌济丘,老刑警劉巖谱秽,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異摹迷,居然都是意外死亡疟赊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門峡碉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來近哟,“玉大人,你說我怎么就攤上這事异赫∫握酰” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵塔拳,是天一觀的道長鼠证。 經(jīng)常有香客問我,道長靠抑,這世上最難降的妖魔是什么量九? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上荠列,老公的妹妹穿的比我還像新娘类浪。我一直安慰自己,他們只是感情好肌似,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布费就。 她就那樣靜靜地躺著,像睡著了一般川队。 火紅的嫁衣襯著肌膚如雪力细。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天固额,我揣著相機與錄音眠蚂,去河邊找鬼。 笑死斗躏,一個胖子當(dāng)著我的面吹牛逝慧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啄糙,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼笛臣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迈套?” 一聲冷哼從身側(cè)響起捐祠,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桑李,沒想到半個月后踱蛀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡贵白,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年率拒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禁荒。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡猬膨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呛伴,到底是詐尸還是另有隱情勃痴,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布热康,位于F島的核電站沛申,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏姐军。R本人自食惡果不足惜铁材,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一尖淘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧著觉,春花似錦村生、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至葬毫,卻和暖如春镇辉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贴捡。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留村砂,地道東北人烂斋。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像础废,于是被迫代替她去往敵國和親汛骂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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