国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第九單元 面向?qū)ο笠唬侯惻c對象

這篇具有很好參考價(jià)值的文章主要介紹了第九單元 面向?qū)ο笠唬侯惻c對象。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

假設(shè),班級里40位同學(xué),我們用程序保存40位學(xué)生的信息:學(xué)號,姓名,性別,生日,身份證號。如果是你,你會怎么實(shí)現(xiàn)?

小菜同學(xué)拿到這個(gè)題,奮書疾筆,馬上寫出如下代碼:

ArrayList list = new ArrayList();
?
string stuNo1="10001";
string name1 = "張三";
string sex="男";
Datetime birthday1 = Datetime.Parse("1998-08-08");
string idCard1 = "362530199808080510";
list.add(stuNo1);
list.add(name1);
... list.add....
    
........//經(jīng)過1個(gè)半小時(shí)后,終于到了第40位。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-464362.html

那如果是有4000,4萬?你是不是立馬從入門到卸載了?面向?qū)ο髞砀嬖V你解決方案?。?/strong>

1. 面向?qū)ο蟾拍?/h2>

面向?qū)ο缶幊蹋?OOP,Object Oriented Programming

  • 并不是一個(gè)技術(shù),而是一種編程指導(dǎo)思想。

  • 把現(xiàn)實(shí)世界的具體事物全部看成一個(gè)一個(gè)的對象來解決實(shí)際問題。

為什么要用面向?qū)ο缶幊?/strong>

生活中我們解決問題就是按照對象化的方式進(jìn)行的。如果程序也能夠按照生活的中的方式來解

決問題,那么程序就更符合人類的思維習(xí)慣,代碼看起來會更易理解、更簡單、更易維護(hù)。

?

面向?qū)ο缶幊坦餐筇匦裕悍庋b,繼承,多態(tài)。

在C# 中,一定要時(shí)刻的牢記這句話:一切皆為object(對象);

2. 封裝

封裝 被定義為"把一個(gè)或多個(gè)項(xiàng)目封閉在一個(gè)物理的或者邏輯的包中"。在面向?qū)ο蟪绦蛟O(shè)計(jì)方法論中,封裝是為了防止對實(shí)現(xiàn)細(xì)節(jié)的訪問。

抽象和封裝是面向?qū)ο蟪绦蛟O(shè)計(jì)的相關(guān)特性。抽象允許相關(guān)信息可視化,封裝則使開發(fā)者實(shí)現(xiàn)所需級別的抽象

訪問修飾符

C# 封裝根據(jù)具體的需要,設(shè)置使用者的訪問權(quán)限,并通過 訪問修飾符 來實(shí)現(xiàn)。

一個(gè) 訪問修飾符 定義了一個(gè)類成員的范圍和可見性。C# 支持的訪問修飾符如下所示:

  • public:所有對象都可以訪問;

  • private:對象本身在對象內(nèi)部可以訪問;

  • protected:只有該類對象及其子類對象可以訪問

  • internal:同一個(gè)程序集的對象可以訪問;

  • protected internal:訪問限于當(dāng)前程序集或派生自包含類的類型。

實(shí)現(xiàn)封裝的方式共有三種:類的封裝,屬性封裝,方法的封裝。

封裝的作用:

  • 隱藏細(xì)節(jié),設(shè)置訪問權(quán)限,提高安全性

  • 代碼復(fù)用。

  • 提高代碼的可讀性

3. 什么是類

類是一組具有相同事物和行為的抽象(物以類聚)。

類在實(shí)現(xiàn)生活中是不存在的,看不見,摸不著。例如:人類,狗類,貓科類,靈長類.... 這些事物都只是一些抽象的概念,并不是指具體的物體。如果我說:小明今天吃了三碗飯,小紅的頭發(fā)很長,那么,小明,小紅 是指人類的具體對象,lucky(一只貓) 這個(gè)月身體長得很快,這也指的是對象,因?yàn)閘ucky是實(shí)實(shí)在在存在的。

人為什么不和狗分為一類?

答:因?yàn)槿撕凸返捏w征行為都不一樣??!再次強(qiáng)調(diào)類:類是一組具有相同事物和行為的抽象(物以類聚)。人會思考,人會制作工具,而狗不會。

?

對象:是真實(shí)存在的具體實(shí)例。

類(設(shè)計(jì)圖):是對象共同特征的描述(抽象)。

第九單元 面向?qū)ο笠唬侯惻c對象

?

在C#中,必須先設(shè)計(jì)類,才能獲得對象。

第九單元 面向?qū)ο笠唬侯惻c對象

?

4. 如何定義類

定義類的關(guān)鍵字是class,命名規(guī)范為首字母大寫,以帕斯卡(大駝峰)方式命名 如:

<訪問修飾符> class 類名
{
    // 構(gòu)造器(下一個(gè)單元會講到)
    
    // 字段
    
    // 屬性(特征)
    
    // 方法(行為)
    
    // 事件(C# 高級階段學(xué)習(xí))
    
    // 索引器(c# 高級階段學(xué)習(xí))
    
}

如:
public class Person
{
    // 字段
    private string name;
    
    // 屬性
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            value=name;
        }
    }
    
    // 方法
    public void eat()
    {
        Console.WriteLine("吃飯,我要吃油燜大蝦");
    }
}

?

其中,字段,屬性,方法,被統(tǒng)稱為類的成員。字段,屬性 被稱為成員變量,方法被稱為成員方法

訪問標(biāo)識符 <access specifier> 指定了對類及其成員的訪問規(guī)則。如果沒有指定,則使用默認(rèn)的訪問標(biāo)識符。類的默認(rèn)訪問標(biāo)識符是 internal,成員的默認(rèn)訪問標(biāo)識符是 private。

5. 字段與屬性

字段一般是私有的(private),屬于類的私有信息,如:姓名,年齡,身份證號等等信息都是屬于人類的私有信息。

public class Person
{
    private string name;
    private int age;
}

?

屬性是類對外提供訪問字段的途徑,一般是公有的(public) ,如:別人問你年齡,女孩子一般說18歲。此時(shí)她說的18歲是她自己對外主動(dòng)暴露出來的,事實(shí)上她的真實(shí)年齡信息是私有的,只有她自己知道,到底是不是18歲我們其實(shí)是不清楚的。

public class Person
{
    private string name;
    private int age;
    
    public string Name
    {
        // get 訪問器
        get
        {
            return name;
        }
        // set 訪問器
        set
        {
            value=name;
        }
    }
    
    public int Age
    {
        get
        {
            return 18;
        }
        set
        {
            value = age;
        }
    }
}

Get, Set 訪問器都可以設(shè)置訪問修飾符哦,默認(rèn)的訪問修飾符都是public.

c# 9.0 之后 還支持 Init訪問器, 調(diào)用方可使用屬性初始化表達(dá)式語法 , 在創(chuàng)建表達(dá)式中設(shè)置這些值 。 但構(gòu)造完成后,這些屬性將變?yōu)橹蛔x

?

字段與屬性的區(qū)別

  • 字段是私有的(private),屬性是公開的(public)。

  • 屬性具有讀寫器( get, set)

  • 字段命名,以小駝峰命名,屬性以帕斯卡(大駝峰)命名。

  • 屬性并沒有真正存儲數(shù)據(jù)

只讀屬性

也就是只提供了, Get 訪問器,沒有Set 訪問器。

public class Person
{
    private short orderState
    
    public string OrderState
    {
        get
        {
            switch(orderState){
                case 1:
                    return "待支付";
                case 2:
                    return "待發(fā)貨";
                case 3:
                    return "待收貨";
                case 4:
                    return "已完成";
                default:
                    return "待支付";
            }
        }
    }
}

?

只寫屬性

也就是只提供了, Set 訪問器,沒有Get 訪問

public class Person
{
    private string pwd
    
    public string Password
    {
        set { value = pwd;} // 沒有Get
    }
}

?

屬性簡寫

如果一個(gè)類中,屬性只是直接對字段進(jìn)行讀寫,那么,這個(gè)屬性字段就可進(jìn)行簡寫。

例如:

public class Person
{
    private string name;
    private int age;
    
    public string Name
    {
        get { return name; }
        set { value=name; }
    }
    
    public int Age
    {
        get { return 18; }
        set { value = age; }
    }
}
// 簡化后
public class Person
{
    public string Name {get; set;}
    public int Age {get; set;}
}

?

我們剛說過,屬性是對字段的封裝,但是簡寫后的屬性根本就看不到類,豈不是自相矛盾嗎?其實(shí)簡寫屬性中其實(shí)隱藏了字段,如果通過反編譯工具編譯 MS IL 或者通過反射技術(shù)去查看,我們會可以將它隱藏的字段讀取出來。

6. 類的對象(實(shí)例)

語法:

類名 對象名 = new 類名();
如:
Person per = new Person();

  

使用對象

訪問屬性: 對象名.成員屬性
訪問行為: 對象名.方法名(…)

?

例如:

public class Person
{
    private string name
    
    public string Name
    {
        set { value = name;}
        get { return name;}
    }
    
    public void Eat()
    {
        Console.WriteLine($"姓名:{name},他正在吃飯..");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Person per1 = new Person();
        per1.Name = "張三"; // 訪問屬性
        per1.Eat();  // 調(diào)用成員方法
        
        Person per2 = new Person();
        per2.Name = "李四"; // 訪問屬性
        per2.Eat();  // 調(diào)用成員方法
    }
}

輸出結(jié)果:

姓名:張三,他正在吃飯..
姓名:李四,他正在吃飯..

  

7. 構(gòu)造方法

學(xué)構(gòu)造方法的目的?

  • 真正知道對象具體是通過什么得到的。

  • 能夠掌握為對象賦值的其他寫法。

構(gòu)造方法的作用

  • 用于初始化一個(gè)類的對象,并返回對象的地址。

  • 簡化對象初始化的過程

語法

修飾符 類名(形參列表)
{
	...
}

public class Car 
{
    ...
    // 無參數(shù)構(gòu)造器
    public Car()
    {
    	...
    }
    // 有參數(shù)構(gòu)造器
    public Car(String n, String b)
    {
    	...
    } 
}

  

初始化對象的格式

類名 對象名稱 = new 構(gòu)造器;
Car c = new Car();

  

構(gòu)造器的分類

  • 無參數(shù)構(gòu)造器(默認(rèn)存在的):初始化的對象時(shí),成員變量的數(shù)據(jù)均采用默認(rèn)值。

  • 有參數(shù)構(gòu)造器:在初始化對象的時(shí)候,同時(shí)可以為對象進(jìn)行賦值。

注意事項(xiàng)

  • 任何類定義出來,默認(rèn)就自帶了無參數(shù)構(gòu)造器,寫不寫都有。

  • 一旦定義了有參數(shù)構(gòu)造器,無參數(shù)構(gòu)造器就沒有了,此時(shí)就需要自己寫一個(gè)無參數(shù)構(gòu)造器了。

public class Car 
{
	...
	// 無參數(shù)構(gòu)造器(默認(rèn)存在的) 
}

public class Car 
{
    ...
    public Car()
    {
        // 無參數(shù)構(gòu)造器(需要寫出來了)
    }    
    public Car(String n, String b)
    {
        // 有參數(shù)構(gòu)造器
	} 
}

?

8. 兩個(gè)變量指向同一個(gè)對象

class Student
{
    public string Name { get; set; }
    public string Sex  { get; set; }
    public string Hobby  { get; set; }
    
    public void Study()
    {
        Console.WriteLine($"姓名:{Name},性別:{Sex},愛好:{Hobby}");
    }
}
public static void main(String[] args) 
{
    Student s1 = new Student();
    s1.Name = "小明";
    s1.Sex = '';
    s1.Hobby = "游戲、睡覺、聽課";
    s1.Study();
    // 把學(xué)生類型的s1變量賦值給學(xué)生類型的s2變量
    Student s2 = s1;
    s2.Hobby = "愛提問";
    
    Console.WriteLine(s2.Name);
    Console.WriteLine(s2.Sex);
    
    Console.WriteLine(s1.Hobby);
    s2.Study();
}

?

輸出結(jié)果:

姓名:小明,性別:男,愛好:游戲、睡覺、聽課
小明
男
愛提問
姓名:小明,性別:男,愛好:愛提問

  

內(nèi)存分布圖

第九單元 面向?qū)ο笠唬侯惻c對象

思考:如果某個(gè)對象,被當(dāng)作方法參數(shù)傳遞之后,在方法體內(nèi)對象(形參)的某些屬性被修改,那么實(shí)參對象的屬性會發(fā)生變化嗎?

9. this 關(guān)鍵字

假設(shè)有如下一段代碼:

public class Person
{
    private string name;
    private string age;
    public Person(string name,string age)
    {
        name = name; // 此處很有可能會有問題!!
        age = age;   // 此處很有可能會有問題!!
    }
}

?

編譯器很有可能分不清 name 到底是形參還是成員變量,怎么破? this 關(guān)鍵字就可以幫忙解決。

this關(guān)鍵字

  • this關(guān)鍵字可以出現(xiàn)在成員方法、構(gòu)造器中,代表當(dāng)前對象的地址。

  • 作用:訪問當(dāng)前對象的成員變量、成員方法。

public class Person
{
    private string name;
    private string age;
    public Person(string name,string age)
    {
        this.name = name; 
        this.age = age;
    }
}

10 . 作業(yè)

  1. 學(xué)生類:

    • 字段:姓名,性別,成績,零錢

    • 屬性:姓名:性別,成績( 只寫Set訪問器),成績等級(成績<60 -->差,60<= 成績<= 70 ---> 一般,70< 成績<=80 --->中,80<成績 <=90--->良, 其他---->優(yōu), 并且此屬性只讀),零錢

    • 重載構(gòu)造方法,無參,有參(姓名,性別,成績,零錢)

  2. 學(xué)生類中定義Print 方法,將 姓名,性別,成績,零錢等級 輸出到控制臺。

  3. 在學(xué)生類中,定義HelpShop()方法,意思是 學(xué)生可以幫其他同學(xué)購物,然后自己獲得同學(xué)給的1元的傭金。偽代碼如下:

    public class Student
    {
        // ...字段
        // ...屬性
        
        /// <summary>
        /// 幫其他同學(xué)購物
        /// <summary>
        /// <param name="s">被幫助的同學(xué)</param>
        /// <param name="money">購物所花費(fèi)的金額</param>
        public void HelpShop(Student s, decimal money)
        {
            
        }
    }
  4. 在Main方法中創(chuàng)建學(xué)生類對象,通過無參構(gòu)造方法創(chuàng)建 s1 對象,然后給 姓名,性別,成績,零錢 屬性賦值。

  5. 在Main方法中創(chuàng)建學(xué)生類對象,通過有參構(gòu)造方法創(chuàng)建 s2 對象 并初始化對象。

  6. 調(diào)用s1, s2 Print方法,查看屬性值。

  7. s1 調(diào)用 HelpShop 方法, 將 s2 作為參數(shù)傳遞進(jìn)去

  8. 再次調(diào)用Print 方法,查看s1, s2 的屬性值的變化。

?      

視頻教程:

C#入門到精通 - 網(wǎng)易云課堂 (163.com)

?

到了這里,關(guān)于第九單元 面向?qū)ο笠唬侯惻c對象的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包