亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

數往知來C#面向對象〈三〉

2019-11-14 14:01:44
字體:
來源:轉載
供稿:網友

C# 基礎方法篇

一、復習
1)方法的重載
方法的重載并不是一個方法,實際上方法的重載就是一些不同的 方法,目的是為了方便程序員編碼,所以將功能相近的方法命名相同
根據參數,編譯器自動的去匹配方法體,而不需要程序員記住 的方法
--》如何判斷重載寫的對不對
將方法的定義拿出來,去掉修飾符,去掉方法體,去掉返回類型
 

int InputNum()int InputNum(int max)int InputNum(int min,int max)

-->將參數列表中的局部變量名去掉,只留參數類型
 

int InputNum()int InputNum(int )int InputNum(int ,int )

二、封裝
   -》屬性是對字段的封裝
   -》 方法是對過程的封裝
   -》類是對對象的封裝(特性和功能)
   -》程序集是對類庫的封裝

C# 基礎繼承篇

為什么使用繼承?
-》代碼的重用
-》實現多態(里氏轉換)

繼承中類分為父類(基類)與子類(派生類)

基類

將具有共同特征的這個類,單獨寫出來,稱為父類(基類)

子類

繼承父類所有的特征,也可以有屬于自己不同的特征。

父類(基類):把這個類的對象都具有的一些特征和行為等都封裝到這個類里面。
然后由這個父類派生出子類(派生類),這些子類會把父類里的特征(屬性)行為(方法)等繼承下來。從而實現代碼的重用
例如:

class Person    {        string _name;        int _age;        char _sex;        public string Name        {            get { return _name; }        }        public int Age        {            get { return _age; }        }        public char Sex        {            get { return _sex; }        }        public Person(string name,int age,char sex)        {            _sex = sex;            _name = name;            _age = age;        }        public void SayHello()        {            Console.WriteLine("大家好,我叫{0},今年{1}歲了,我是{2}生",_name ,_age ,_sex );        }    }    class student : Person    {        public student(string name,int age,char sex):base(name,age,sex)        {     //方法體        }        public void SayHello()        {            Console.WriteLine("大家好,我叫{0},今年{1}歲了,我是{2}生",Name ,Age ,Sex );        }    }


這里student類是person的派生類,它繼承了person類的所有成員包括SayHello方法,這里Student的sayhello方法把父類的sayhello方法給隱藏了
繼承的特征
  -》單根性(只能繼承一個基類)
  -》傳遞性(子類可以繼承基類的成員。字段、屬性、方法等)
  -》 派生于object根類(基于C#)(為什么要有根類?還是為了實現多態)

注意問題
  -》構造方法的問題
創建對象的時候,好像是先調用子類構造方法,然后由子類再調用父類構造方法,
再調用構造方法的時候,其實默認有一個base(),調用了父類的無參構造方法

語法:
  class 基類
  {
    //基類成員
  }
  class 子類:基類
  {
    //子類可以有自己的成員
//基類的成員也會被繼承下來
  }
  子類于父類構造方法的執行順序
   Student student = new Student();
   這里New子類對象時會先走到子類的構造方法,這里系統會默認提供一個base()無參的構造方法。如果父類中有了有參的構造方法,系統就不會再分配無參的構造方法,
   此時如果子類調用父類的構造方法就會報錯,因為父類的無參構造方法已經沒有了。解決辦法由兩個
   1)再手動在父類中添加一個無參的構造方法。
   2)base(參數列表)傳參數上去。
      public student(string name,int age,char sex):base(name,age,sex)  這里不執行下面的大括號,然后base調用父類的構造方法,如果父類上面還有父類會依次往上調,
   直到調到最上面的父類執行完最上面的父類構造方法然后再依次的往下執行回到這個子類,執行剩下的方法體
     {
     //方法體
        }
  this和base關鍵字:
  this表示當前類 當前構造方法
  base表示父類  父類構造方法
  經典例子:
     

class MyClass    {        public MyClass():this(3)        {            Console.WriteLine(1);        }        public MyClass(int i):this(2,3)        {            Console.WriteLine(i);        }        public MyClass(int i, int j)        {            Console.WriteLine("{0}{1}",i,j);        }    }    class PRogram    {        static void Main(string[] args)        {            MyClass myclass = new MyClass();        }    }


在new對象時首先會跳到無參的構造方法,此時看到有一個this(3),不執行方法體,在本類中尋找匹配帶一個參數的構造函數,然后調用,
此時又看到一個this(2,3),又在本類中尋找匹配帶兩個參數的構造函數,最后調用帶兩個參數的構造函數,執行帶兩個參數的方法體,
完畢之后又回到帶一個參數的構造函數中執行方法體,最后再跳會無參的構造函數中執行無參的構造函數的方法體。

C# 基礎多態篇

四、訪問修飾符
  privete  只有在本類中訪問
  public   任何地方都可以訪問
  protected 只能在當前類和子類中訪問
  internal   只允許在當前類中訪問
  protectecd internal
里氏轉換
  1)子類可以直接賦值給父類(子類對象可以直接轉換為父類對象)隱式轉換
  2)如果滿足第一個條件的父類對象,可以強制轉換為原來的子類對象。 強制轉換
強制轉換可以通過  is 和 as 來判斷

is:
語法   bool b=要轉換的對象 is 要轉換的類型
如果可以轉換就會返回一個true,如果轉換不合法就會返回一個false.
IS操作符很清晰,但是操作效率不高,另種方式是AS

as:
語法 要轉換的類型 對象=要轉換的對象 as 要轉換的類型
as操作首先測試是否合法,如果合法就轉換,如果不合法就返回null,null表示空引用

五、new和override
new隱藏基類方法: 前提是子類和父類的方法名參數返回值都一樣,這時候寫new和不寫new沒上面區別。

class MyBase    {        public void Func()        {            Console.WriteLine("我是父類");        }    }    class MySub : MyBase    {        public void Func()        {            Console.WriteLine("我是子類");        }    }

這時候子類的方法會把父類的方法隱藏掉,這時候對象是什么類型就調用什么類型的方法。

override重寫基類方法:子類要重寫基類的方法,父類的方法必須要有virtual  表明是虛方法,可以被子類重寫。
一旦父類的方法被重寫,父類的方法將不復存在,調用的時候會調用重寫之后的新的方法。

C# 基礎關于構造方法的調用

class Person //基類人類
{

//如何在子類中訪問父類的字段

//分別定義三個字段 屬性

//字段的訪問修飾符設定為 protected 這樣在子類中便可以訪問這個字段

//protected表示當前類和子類可以訪問


protected string _name;public string Name{get { return _name; }}protected int _age;public int Age{get { return _age; }}protected char _gender;public char Gender{get { return _gender; }}

//寫一個構造方法 將字段初始化賦值

public Person(string name, int age, char gender){this._name = name;this._age = age;this._gender = gender;}

//定義一個無參的構造方法,這樣的話子類才能調用父類的構造函數,避免子類要調用無參的構造方法時出錯。

public Person(){}}

//定義一個supperman子類 繼承自 person

class SupperMan : Person{//子類獨有字段 特征private string _state;public string State{get { return _state; }}public SupperMan(string name, int age, char gender, string state)  //這里不寫base()默認調用父類無參的構造方法,寫與不寫都一樣        {base._name = name;base._age = age;base._gender = gender;base._state = state;//*this 是表示這是該類中的一個字段//*base則表示這是一個從父類中繼承過來的字段//*在這里 this 與base可以不寫 是寫給程序員看的}public void Hello(){Console.WriteLine("大家好,我叫{0},我的年齡是{1},我是{2}人,我的特征是{3}",Name,Age,Gender,State);}}class Program{static void Main(string[] args){SupperMan supperMan = new SupperMan("超人", 28, '', "內褲外穿");supperMan.Hello();Console.ReadKey();}}

C# 基礎構造方法篇

2)構造方法
  --》沒有繼承關系
      -》默認構造方法(無參的構造方法)
沒有提供構造方法的時候, 系統自動的添加一個無參的構造方法
如果已經寫了構造方法,那么系統就不會自動的添加默認的構造方法(手動添加)
   -》構造方法也有重載
調用
     this(當調用制定構造方法后有this的時候,會先調用this表示的重載,再調用自己的構造方法)
  --》有繼承關系
     -》默認調用父類的構造方法
     -》使用base可以指定調用父類構造方法

靜態構造方法
靜態構造方法從程序的開始到結束只會被調用執行一次,當new對象或者訪問這個類的字段或屬性等時就會調用執行,

C# 基礎多態加強篇

多態實現的前提:
     -》繼承
     -》子類父類方法名必須相同
里氏轉換原則(只是實現多態的一個條件不是前提)
     -》父類 父類對象=new 子類();
。。。
子類 子類對象=(子類)父類對象 必須滿足上面的條件這里才能轉換成功
隱藏基類的方式
只需要在子類的方法前寫上new關鍵字即可(不寫也可以,系統會自動添加)
隱藏看類型
   

class Person    {        public void SayHello()        {            Console.WriteLine("依依呀呀");        }    }    class American : Person    {        public new void SayHello()        {            Console.WriteLine("Hello");        }    }    class Korean : Person    {        public new void SayHello()        {            Console.WriteLine("啊你喲哈撒喲");        }    }

重寫基類方法
     -》在父類方法前加上virtual
     -》在子類方法前加上override
重寫只管新


  

class Person    {        public virtual void SayHello()        {            Console.WriteLine("依依呀呀");        }    }    class American : Person    {        public override void SayHello()        {            Console.WriteLine("Hello");        }    }    class Korean : Person    {        public override void SayHello()        {            Console.WriteLine("啊你喲哈撒喲");        }    }

    
二、產生隨機數
   Random:專門處理隨機數的類。(偽隨機數,其運行原理是:先得到系統的當前時間(精確到毫秒),然后根據系統的當前時間計算出一個數(就是所謂的偽隨機數))
   --》創建隨機對象
       Random r=nrw Radom();
注意: 隨機數的對象不要創建在循環里 不然會得到一些重復一樣的數字
   -->調用Next方法的得到隨機數
           -》next方法有三個重載
                int res=r.netx();   產生一個非負數的隨機數
                int res=r.next(100); 產生一個0到99的隨機數,兩端可以取到
                int res=r.next(2,30);產生一個2到29的隨機數,兩端可以取到

記錄時間的類
Stopwath:
Stopwath stop=new Stopwath();
stop.start();   開始計算
.....
stop.Stop();     停止計算

console.writeLine(stop.Elapsed);  得到計算結果

多態:為了程序的可擴展性
-》開放封閉的原則(對擴展開放,對修改封閉)
多態的使用:
將不同的對象都當做父類來看,屏蔽掉各個對象間的不同,寫出通用代碼,做出通用編程,
三、抽象類
什么是抽象方法
有些時候父類的方法不需要實現
有些時候不知道怎么實現
沒有方法體的方法叫做抽象方法,使用abstact修飾,
包含抽象方法的類,也必須是一個抽象類。
抽象類中可以包含非抽象成員
抽象方法的用法和虛方法的用法完全一樣
不同的是他們的定義不一樣,抽象類不可以實例化
抽象類存在就是為了被繼承的,因此不允許定義為private.

抽象類不能實例化,比一般類多一抽象成員
抽象類與一般類有兩個最大的區別
--》不能實例化
--》 具有抽象成員 ( 凡是跟方法有關的都可以抽象)
     -》方法
  -》屬性
  -》索引器(帶參數的屬性)
  -》事件的聲明(可以看做“屬性”,屬性石一個get set方法,事件是add  remove方法)

使用抽象屬性的時候,一般是抽象類提供屬性以及可訪問性
子類提供字段與屬性的實現
public abstract string s
{
   get;   //這里的屬性和自動屬性長得很像,但是要注意他們的含義不一樣,這里由abstract修飾就是告訴系統,這里是抽象方法沒有方法體,所以這里不用寫{}
   set;   //抽象屬性可以只有get或set,因為他可以由構造方法給字段賦值,而自動屬性是后臺自動生成字段,所以自動屬性的get set要成對出現
}

C# 基礎重寫ToString方法

四、重寫ToString方法
 

string[] str = { "1", "2", "3", "4" };    MyClass myClass = new MyClass();            myClass.Name1 = "我是MyClass";            myClass.Name2 = "0";            myClass.Name3 = "3";            myClass.Name4 = "4";            myClass.Name5 = "5";            MyStruct myStruct;            myStruct.Name = "我是MyStruct";            Console.WriteLine(str);            Console.WriteLine(myClass);            Console.WriteLine(myStruct);

這里打印數組和類系統會默認調用ToString()方法 任何類型都有一個ToString()方法,因為這個方法是object根類提供的,C#里所有的類都繼承自object類,所以object的ToString()會被繼承下來。
Reflector可以看到object的ToString()方法是個虛方法,如果子類沒有重寫,那么系統都會默認調用這個方法,
可以看到這個方法調用 this.GetType()方法 (獲得當前實力的命名空間),然后返回
所以上面打印出來的是這個實例所在的命名空間名和實例名。
 

public virtual string ToString()   {    return this.GetType().ToString();   }

既然父類提供的是虛方法那子類就可以重寫,我們可以通過子類重寫ToString()方法來實現我們想要顯示的內容
  

class MyClass    {        public  string name1;        public override string ToString()        {            return name1;        }    }    class Program    {        static void Main(string[] args)        {            MyClass myClass = new MyClass();            myClass.name1 = "張三";            Console.WriteLine(myClass);//這里會顯示 張三            Console.ReadKey();        }    }

//本系列會持續更新。晚安!


 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久热精品在线视频| 欧美日韩美女在线| 欧美精品久久久久久久久久| 国产精品久久电影观看| 国产精品狠色婷| 欧美一级黑人aaaaaaa做受| 国产欧美日韩精品丝袜高跟鞋| 国产精品久久久久久久久久小说| 日韩在线播放一区| www日韩中文字幕在线看| 国产成人精品免高潮在线观看| 亚洲综合中文字幕68页| 国产精品美女午夜av| 国产精品一久久香蕉国产线看观看| 午夜精品蜜臀一区二区三区免费| 黑人巨大精品欧美一区免费视频| 国产日韩欧美91| 国产日韩欧美在线看| 欧美成人精品激情在线观看| 国产精品久久久久久久久久新婚| 亚洲一区二区免费在线| 亚洲精品天天看| 欧美性xxxxx| 久久偷看各类女兵18女厕嘘嘘| 91精品国产综合久久久久久蜜臀| 精品国产美女在线| 久久777国产线看观看精品| 一色桃子一区二区| 成人在线精品视频| 国产成人精品在线视频| 成人看片人aa| 97av在线视频免费播放| 国产欧美一区二区三区视频| 高跟丝袜一区二区三区| 国产视频自拍一区| 91精品久久久久久久久久久久久| 亚洲第一色中文字幕| 欧美精品日韩三级| 91色视频在线导航| 国产精品视频中文字幕91| 4438全国成人免费| 久久成年人免费电影| 91国产精品电影| 国产成人精品久久亚洲高清不卡| 欧美视频在线免费看| 欧美激情a在线| 亚洲国产精品va在线看黑人| 欧美午夜www高清视频| 97婷婷大伊香蕉精品视频| 国产精品自产拍在线观| 久久99久久99精品中文字幕| 国产一区av在线| 欧美亚洲第一页| 日韩成人在线网站| 日韩av高清不卡| 国产不卡av在线免费观看| 精品久久久久久中文字幕一区奶水| 中文字幕亚洲欧美日韩2019| 一区二区三区视频观看| 欧美电影免费观看网站| 国产啪精品视频| 欧美性videos高清精品| 成人免费网站在线看| 国产精品99久久久久久人| 国产成人自拍视频在线观看| 国产精品欧美激情在线播放| 色狠狠av一区二区三区香蕉蜜桃| 日本国产一区二区三区| 欧美日韩中文字幕| 欧美亚洲视频一区二区| 成人有码在线播放| 亚洲免费一级电影| 国产精品免费在线免费| 国产噜噜噜噜久久久久久久久| 亚洲欧美日韩一区二区三区在线| 91视频免费在线| 久久精品夜夜夜夜夜久久| 国产成人亚洲综合青青| 亚洲黄色有码视频| 中文字幕自拍vr一区二区三区| 久久久久久久香蕉网| 黑人巨大精品欧美一区二区一视频| 国产成人福利网站| 国产噜噜噜噜噜久久久久久久久| 亚洲美女喷白浆| 久久久久久久久久久亚洲| 亚洲电影中文字幕| 中文字幕日韩免费视频| 国外日韩电影在线观看| 黑丝美女久久久| 日韩免费不卡av| 91日韩在线播放| 中文字幕精品网| 久久99热这里只有精品国产| 亚洲欧美在线一区| 欧美视频免费在线观看| 亚洲国产日韩欧美综合久久| 91久久国产婷婷一区二区| 久久久精品视频成人| 国产中文字幕亚洲| 中文字幕欧美日韩精品| 国产精品夜色7777狼人| 精品国产乱码久久久久久虫虫漫画| 91sa在线看| 亚洲国产成人在线视频| 精品国产一区二区三区四区在线观看| 国内偷自视频区视频综合| 欧美午夜女人视频在线| 欧美另类极品videosbest最新版本| 欧美亚洲第一页| 欧美日韩国产一中文字不卡| 国产在线拍偷自揄拍精品| 亚洲第一免费网站| 日韩免费在线视频| 日本久久久久久久| 黄色一区二区在线观看| 日本视频久久久| 日本免费在线精品| 午夜免费在线观看精品视频| 欧美日韩中文字幕| 中文字幕日韩欧美在线| 亚洲欧美成人精品| 亚洲日本成人女熟在线观看| 91精品国产99久久久久久| xxx一区二区| 日韩av不卡在线| 久久久在线观看| 国产精品视频区| 日韩欧美在线视频| 国产成人综合一区二区三区| 欧美激情第99页| 福利一区福利二区微拍刺激| 久久久国产一区二区三区| 欧美中文在线免费| 日韩亚洲欧美成人| 亚洲欧美国产高清va在线播| 中文.日本.精品| 国产精品一区二区av影院萌芽| 久久韩国免费视频| 精品成人乱色一区二区| 国产精品视频最多的网站| 久久精品最新地址| 日韩激情第一页| 操日韩av在线电影| 亚洲免费视频观看| 日韩欧美一区二区三区| 亚洲精品动漫久久久久| 国产精品中文字幕久久久| 欧美日韩一区二区三区| 亚洲日本中文字幕| 日日骚av一区| 这里只有视频精品| 亚洲午夜av电影| 日韩av大片免费看| 亚洲一区二区三区四区视频| 欧美高清激情视频| 成人精品一区二区三区电影黑人| 欧美日韩在线观看视频小说| 国产mv免费观看入口亚洲| 国产成人在线一区二区| 91久热免费在线视频| 中文字幕国产日韩| 亚洲精品理论电影| 中文日韩在线观看|