C#基礎入門第九天(面向對象1)

1、面向對象的概念
1.面向過程(C)-----》面向對象
面向過程:面向的是完成這件事的過程,強調的是完成這件事的動做。
如:將東西放進冰箱
一、打開冰箱門
二、把東西放進去
三、關閉冰箱門
如上都是強調的動做ide

如:張三長的矮小,力氣也小
打開冰箱門,因爲矮小夠不這,須要墊個凳子
力氣小擡不動東西,須要找人幫忙
關閉冰箱門,依然須要墊個凳子函數

李四長的高,力氣很是大
         本身就能打開冰箱門
         本身就能擡動
         關閉冰箱門也不須要凳子

若是用面向過程的思想來解決事,當執行這件事的人不一樣時,這樣就須要爲每一個不一樣的人量身定作解決事情的方法。工具

面向對象:沒有統一的理解,找個對象來作這個事情
如:把東西放進冰箱裏
由於乾的事情裏,每件都有冰箱,這樣就能夠以冰箱做爲對象
1.冰箱門能夠被打開
2.東西能放進冰箱裏
3.冰箱門能夠被關閉this

張三:調用1 調用2 調用3
李四:調用2 調用2 調用3code

面向對象:意在寫出一個通用的代碼,屏蔽差別對象

關門
面向過程:關門
張三:一腳把門踹緊了
李四:輕輕的把門帶上了
王五:門沒關嚴內存

面向對象:關門
門能夠被關閉資源

我在黑板上畫了一個圓、方塊、菱形
將 圓做爲對象 圓能夠被畫在黑板上
將 方塊做爲對象 方塊能夠被畫在黑板上
將 菱形做爲對象 菱形能夠被畫在黑板上get

將 黑板做爲對象 黑板上能夠被畫:圓、方塊、菱形
找對象時,通常找的是被動的一方string

咱們在代碼中描述一個對象,經過描述這個對象的屬性和方法。
對象沒必要須是看得見摸得着的

燈:屬性和方法
屬性:值
外形:長的
亮度:500W
顏色:白色
牌子:XX
發信:發光

電風扇:屬性,方法
屬性:三個扇葉
顏色:白色
品牌:XX
方法:轉動,扇風

咱們把具備相同屬性和相同方法的對象進行進一步的封裝,抽象出來,類這個概念。
類就是個模子,肯定對象應該具備的屬性和方法
對象時根據類建立出來的。
類至關於一個蓋大樓的圖紙,對象就是蓋出來的大樓

2、面向對象的代碼
類:
語法
public class 類名
{
字段:
屬性:
方法:
}
寫好類以後,咱們須要建立這個類的對象,
name,建立這個類的對象的過程稱之爲:實例化
使用關鍵字:new
this:表示當前這個類的對象
類是不佔內存的,而對象時佔內存的

public class Person
{
    public string _name;
    public int _age;
    public char _gender;

    public void CHLSS()
    {
        Console.WriteLine("我叫{0},我今年{1}歲,我是{2}的,我能夠吃喝拉撒睡~~~", this._name,this._age,this._gender);
    }
}

調用類

static void Main(string[] args)
    {
        //建立person類的對象
        Person zhangSan = new Person();
        zhangSan._name = "張三";
        zhangSan._age = 21;
        zhangSan._gender = '男';
        zhangSan.CHLSS();
        Console.ReadKey();
    }

屬性:保護字段,對字段的賦值進行賦值和取值進行限定
屬性的本質就是兩個方法,get()和set()
當給屬性賦值的時候,首先執行set方法
當輸出屬性值得時候,會執行get方法
字段就是女人 屬性纔是真男人
字段在類中,必須是私有的。要對字段進行操做必須經過屬性。
屬性的代碼
既有get又有set:可讀可寫屬性
只有get:只讀屬性
只有set:只寫屬性

訪問修飾符
public:公開的公共的,在哪都能訪問
pribate:私有的,只能在當前類的內部進行訪問,出了這個類就訪問不到

public class Person
{
    private string _name;
    public string Name
    {
        //當輸出屬性值得時候,會執行get方法
        get { return _name; }
        //當給屬性賦值的時候,首先執行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 != '女')
            {
                return _gender = '男';
            }
            return _gender; }
        set { _gender = value; }
    }
    public void CHLSS()
    {
        Console.WriteLine("我叫{0},我今年{1}歲,我是{2}的,我能夠吃喝拉撒睡~~~", this.Name,this.Age,this.Gender);
    }
}

屬性調用

class Program
{
    static void Main(string[] args)
    {
        //建立person類的對象
        Person zhangSan = new Person();
        zhangSan.Name = "張三";
        zhangSan.Age = 21;
        zhangSan.Gender = '男';
        zhangSan.CHLSS();
        Console.ReadKey();
    }
}

3、靜態和非靜態的區別(static)
一、在非靜態類中,既能夠有實例成員,也能夠有靜態成員。
二、在調用實例成員的時候,須要使用對象名.實例成員
在調用靜態成員的時候,須要使用類名.靜態成員
總結:靜態成員必須使用類名去調用,而實例成員使用對象名調用
靜態函數中,只能訪問靜態成員,不容許訪問實例成員
實例函數中,既可使用靜態成員,也可使用實例成員
靜態類中只容許有靜態成員,不能有實例成員
使用範圍
一、若是你想要你的類當作一個「工具類」去使用,這時候能夠考慮寫成靜態類。(常用的類)
二、靜態類在整個項目中資源共享
只有在程序所有結束後,靜態類纔會釋放資源
釋放資源:釋放內存 C#中有垃圾回收器GC

4、構造函數
做用:幫助咱們初始化對象(給對象的每一個屬性依次的賦值)
構造函數是一個特殊的方法
一、構造函數沒有返回值,連void也不能寫
二、構造函數名必須跟類名同樣
三、構造函數必須是public
建立對象的時候會執行構造函數
構造函數能夠有重載

類當中會有一個默認的無參數的構造函數,當你寫一個新的構造函數以後,不論是不是無參數的,那個默認的五參數的構造函數都會被幹掉

關鍵字:new
new幫助咱們作了三件事
一、在內存中開闢一塊空間
二、在開闢的空間中建立對象
三、調用對象的構造函數進行初始化對象

關鍵字:this
一、表明當前類的對象
二、在類當中顯示的調用本類的構造函數

5、析構函數
當程序結束的時候,析構函數纔會執行
做用:幫助咱們釋放資源
GC有時候不會立刻釋放資源,這時候使用析構函數來立刻釋放資源。

最後的總結練習

class Ticket
{
    /*寫一個Ticket類,有一個舉例屬性(本屬性只讀,在構造方法中賦值,不能爲負數)
      有一個價格屬性,價格屬性只讀,而且根據舉例distance計算價格Price(1元/千米)
     0-100千米     不打折
     101-200千米   打9.5折
     201-300千米   打9折
     300千米以上   打8折
     有一個方法,能夠顯示這張票的信息,90千米90塊錢 
     */
    private double _distance;
    public double Distance
    {
        get { return _distance; }
    }
    public Ticket(double distance)
    {
        if (_distance < 0)
        {
            _distance = 0;
        }
        this._distance = distance;
    }

    private double _price;
    public double Price
    {
        get {
            if (_distance > 0 && _distance <= 100)
            {
                return _distance * 1.0;
            }
            else if (_distance > 100 && _distance <= 200)
            {
                return _distance * 0.95;
            }
            else if (_distance > 200 && _distance <= 300)
            {
                return _distance * 0.9;
            }
            else
            {
                return _distance * 0.8;
            }
 }

    }
    public void Show()
    {
        Console.WriteLine("{0}千米{1}元錢", _distance, Price);
    }
}

    調用
    static void Main(string[] args)
    {
        Ticket t = new Ticket(150);
        t.Show();
        Console.ReadKey();
    }
}
相關文章
相關標籤/搜索