C#基礎系列第五篇

前言: 完全是我在學習過程中記錄的筆記,只不過分享一下讓很多剛開始學習.net編程的人能夠很快的學會C#語言

  1. 多態的一些說明

?(1) 多態就是為了程序的可擴展性

?(2)多態的使用:將不同的對象當作父類來看,屏蔽掉各個對象間的不同,寫出通用代碼,做出通用編程,同樣調用不同結果,以適應需求的不斷變化

?(3)ToString方法有Object提供,使得所有的類型均可以使用Console.WriteLine()方法

??????????? class Person

??????????? {

?????????????????? public string Name { get; set; }

?????????????????? public int Age { get; set; }

?????????????????? //當寫第三個的時候寫入下面的方法

?????????????????? public override string ToString()

?????????????????? {

????????????????????????? return Name;

?????????????????? }

??????????? }

??????????? class Program

??????????? {

?????????????????? static void Main(string[] args)

?????????????????? {

????????????????????????? int[] nums = { 1, 34, 4, 65, 7, 87, 454 };

????????????????????????? Console.WriteLine(nums);

????????????????????????? //輸出:System.Int32[]

????????????????????????? //準備對象

????????????????????????? Person p = new Person();

????????????????????????? p.Name = "韓迎龍";

????????????????????????? p.Age = 19;

????????????????????????? Console.WriteLine(p);

????????????????????????? //輸出:智能機器.Person

????????????????????????? //第三個

????????????????????????? Person p1 = new Person();

????????????????????????? p1.Name = "韓迎龍";

????????????????????????? p1.Age = 19;

????????????????????????? Console.WriteLine(p);

????????????????????????? //輸出張三

????????????????????????? Console.ReadKey();

?????????????????? }

??????????? }

?(4)多態的保障

??????????? 1)繼承,相同名字的方法(重載不算)

??????????? 2)里氏轉換原則

?(5)is和as

??????????? 1)判斷父類繼承

??????????? 2)判斷接口實現

??????????? 3)判斷拆箱和裝箱

  2.多態實現計算器

 (1) 新建一個控制臺應用程序,起名為多態計算器(2)添加一個CalculstingWay類,表示計算的方法/// <summary>/// 計算機的計算/// </summary>class CalculstingWay{int num1;int num2;public int Num1{get { return num1; }set { num1 = value; }}public int Num2{get { return num2; }set { num2 = value; }}public CalculstingWay(int n1, int n2){num1 = n1;num2 = n2;}public virtual int Calculating(){//這個方法是需要子類重寫的return 0;}}(3)添加一個Add類,表示實現加法的計算/// <summary>/// 提供加法計算的方法/// </summary>class Add:CalculstingWay{public Add(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (4)添加一個Sub類,表示實現減法的計算/// <summary>/// 提供減法計算的方法/// </summary>class Sub : CalculstingWay{public Sub(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 - base.Num2;}}    (5)添加一個Multi類,表示實現乘法的計算/// <summary>/// 提供乘法計算的方法/// </summary>class Multi : CalculstingWay{public Multi(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (6)添加一個Div類,表示實現除法的計算/// <summary>/// 提供除法計算的方法/// </summary>class Div : CalculstingWay{public Div(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}

(7)添加一個Calculator類,表示計算器類/// <summary>/// 表示計算器/// </summary>class Calculator{//可以進行計算的對象CalculstingWay cal;public Calculator(int num1, int num2, string oper){switch (oper){case "+":cal = new Add(num1, num2);break;case "-":cal = new Sub(num1, num2);break;case "*":cal = new Multi(num1, num2);break;case "/":cal = new Div(num1, num2);break;default:cal = null;break;}}public int jisuan(){if (cal != null){return cal.Calculating();}else{return -1;}}}

  3.?抽象方法

?(1) 父類提供一個可以被重寫的方法,有子類重寫,通過父類,new子類來調用

?(2)父類不需要方法體

?(3)語法:[public] abstract 返回類型 方法名(參數);

?????????????????? 和方法相比有以下幾點需要注意的:

?????????????????? 1)去掉方法體,直接在圓括號結束的時候加分號

?????????????????? 2)加上abstract進行修飾

?(4)抽象方法只允許在抽象類中存在

??????????? 1)只要在class關鍵字前面用abstract修飾即可

?????????????????? abstract class 類名

?????????????????? {

????????????????????????? //成員

?????????????????? }

(5)抽象方法,抽象類就是為了被子類繼承,重寫的

   abstract class Animal{public abstract void Shout();}class Dog : Animal{public override void Shout(){Console.WriteLine("財旺福王運道旺");}}class Cat : Animal{public override void Shout(){Console.WriteLine("喵喵喵");}}class Program{static void Main(string[] args){Animal[] animals = {new Dog(),new Cat() };for (int i = 0; i < animals.Length; i++){animals[i].Shout();}Console.ReadKey();}}    

?(6)抽象方法的細節

??????????? 1)抽象類中可以包含什么東西?

?????????????????? ->比一般類多了抽象成員

?????????????????? ->抽象成員有有什么:方法,屬性,索引器,事件聲明

??????????? 2)抽象類不允許實例化,不能new

??????????? 3)抽象類可以有構造方法

??????????? 4)抽象類可以來源于非抽象類

?????????????????? class MyBase

?????????????????? {

?????????????????? }

?????????????????? abstract class Test : MyBase

?????????????????? {

????????????????????????? public abstract void Func();

?????????????????? }

?????????????????? class MySub : Test

?????????????????? {

????????????????????????? public override void Func()

????????????????????????? {

???????????????????????????????? Console.WriteLine("抽象類可以來源于非抽象類");

????????????????????????? }

?????????????????? }

??????????? 5)抽象類必須被子類重寫,除非子類也是抽象的

?(7)練習:有一個形狀Shape類,派生出圓Circle,矩形Rectangle和正方形Square,分別計算他們的面積Area和周長Perimeter?

   1)新建一個控制臺項目:起名為多態小案例2)添加一個Shape類,實現計算面積和周長的方法abstract class Shape{public abstract double GetArea();public abstract double GetPerimeter();}3)添加一個Circle類,實現計算圓的面積和周長class Circle : Shape{int r;public Circle(int r){this.r = r;}public override double GetArea(){return Math.PI * Math.Pow(r, 2);}public override double GetPerimeter(){return 2 * Math.PI * r;}}4)添加一個類,實現計算矩形的面積和周長class Rectangle : Shape{double widthX;double heightY;public Rectangle(double widthX, double heightY){this.widthX = widthX;this.heightY = heightY;}public override double GetArea(){return widthX * heightY;}public override double GetPerimeter(){return 2 * (widthX + heightY);}}5)添加一個類,實現計算正方形的面積和周長class Square : Shape{double length;public Square(double length){this.length = length;}public override double GetArea(){return Math.Pow(length, 2);}public override double GetPerimeter(){return 4 * length;}}class Square1 : Rectangle{public Square1(double length): base(length, length){}}6)在Main方法中實現的代碼如下:class Program{static void Main(string[] args){Circle circle = new Circle(5);Console.WriteLine(circle.GetArea().ToString("0.00"));Console.WriteLine(circle.GetPerimeter().ToString("0.00"));Rectangle rec = new Rectangle(5, 10);Console.WriteLine(rec.GetArea());Console.WriteLine(rec.GetPerimeter());Square square = new Square(5);Console.WriteLine(square.GetArea());Console.WriteLine(square.GetPerimeter());Square1 sqr = new Square1(5);Console.WriteLine(sqr.GetArea());Console.WriteLine(sqr.GetPerimeter());}}

?(8)抽象屬性

??????????? 1)使用abstract修飾

??????????? 2)去掉方法體

??????????? 3)語法:public abstract 返回類型 屬性

????????????????????????? {

???????????????????????????????? get;

???????????????????????????????? set;

????????????????????????? }

??????????? 4)自動屬性必須包含get,set方法

??????????? 5)抽象屬性可以定義只讀,只寫,

?(9)由子類實現抽象屬性的方法

??????????? 1)用override重寫屬性

??????????? 2)添加一個字段,使用屬性

  1. 面向對象計算器(簡單工廠計算器)
(1) 新建一個控制臺應用程序,起名為:簡單工廠計算器(最好寫成英文的,我是為了學習直接寫成中文的了)      (2)新建一個CalculatingWay類,實現計算機的父類計算/// <summary>/// 計算機的計算/// </summary>abstract class CalculstingWay{int num1;int num2;public int Num1{get { return num1; }set { num1 = value; }}public int Num2{get { return num2; }set { num2 = value; }}public CalculstingWay(int n1, int n2){num1 = n1;num2 = n2;}public abstract int Calculating();}(3)新建一個Add類,/// <summary>/// 提供加法計算的方法/// </summary>class Add:CalculstingWay{public Add(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}(4)新建一個Sub類,/// <summary>/// 提供減法計算的方法/// </summary>class Sub : CalculstingWay{public Sub(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 - base.Num2;}}(5)新建一個Multi類,/// <summary>/// 提供乘法計算的方法/// </summary>class Multi : CalculstingWay{public Multi(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (6)新建一個Div類,/// <summary>/// 提供除法計算的方法/// </summary>class Div : CalculstingWay{public Div(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (7)新建一個Factory類static class Factory{public static CalculstingWay GetCalculator(int n1,int n2,string oper){switch (oper){case "+":return new Add(n1, n2);case "-":return new Sub(n1, n2);case "*":return new Multi(n1, n2);case "/":return new Div(n1, n2);default:return null;}}}    (8)在Main方法中寫入如下這段代碼:class Program{static void Main(string[] args){//提示用戶輸入Console.Write("請用戶輸入第一個數字:");int num1 = GetInputNum();Console.Write("請用戶輸入第一個數字:");int num2 = GetInputNum();Console.Write("請輸入運算符");string oper = Console.ReadLine();//開始生產CalculstingWay cal = Factory.GetCalculator(num1, num2, oper);//開始投入使用if (cal != null){int res = cal.Calculating();Console.WriteLine("{0}{1}{2}={3}", num1, oper, num2, res);}else{Console.WriteLine("運算符有誤");}}public static int GetInputNum(){return GetInputNum(int.MinValue, int.MaxValue);}/// <summary>/// 完成int類型數據的輸入,并返回,要求輸入的數字在0到給定的數字之間/// </summary>/// <param name="max">給定的數字的上限</param>/// <returns></returns>public static int GetInputNum(int max){return GetInputNum(0, max);}/// <summary>/// 完成int數字的輸入,要求在給定范圍之間/// </summary>/// <param name="min">給定范圍的下線</param>/// <param name="max">給定范圍的上線</param>/// <returns></returns>public static int GetInputNum(int min, int max){string str = Console.ReadLine();int num;while (true){try{num = Convert.ToInt32(str);if (num > min && num < max){break;}Console.Write("輸入數字不再{0}到{1}之間,請重新輸入", min, max);str = Console.ReadLine();}catch{Console.Write("輸入有誤,請重新輸入");str = Console.ReadLine();}}return num;}} 

轉載于:https://www.cnblogs.com/hanyinglong/archive/2012/10/02/2710298.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260349.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

羅伯特·帕丁森Robert Pattinson(2)

2019獨角獸企業重金招聘Python工程師標準>>> 轉載于:https://my.oschina.net/Bettyty/blog/756873

網博士自助建站系統_自助建站:自助建站到底好還是不好?

自助建站到底好還是不好&#xff1f;很多想要做企業網站的企業都比較關心這個問題&#xff0c;因為自助建站便宜、快&#xff0c;有的自助建站做出來的效果還非常好&#xff0c;不輸于定制的網站的效果&#xff0c;那為什么自助建站大都還很便宜呢&#xff1f;東西還好還便宜的…

linux tar.gz zip 解壓縮 壓縮命令

http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0.9.6.zip download SDK link http://dl.google.com/android/android-sdk_r11-linux_x86.tgz(能夠通過翻墻得到詳細的文件名稱&#xff0c;再通過鏈接下載就可以) tar -c:…

HNU 11720 God Created The Integers

原題傳送&#xff1a;http://acm.hnu.cn/online/?actionproblem&typeshow&id11720&courseid0 對于這條式子&#xff1a; 和下面的式子是等價的&#xff1a; Sp (p2 - 1) / 2 - (p - 1) / 4 那么求出Sp后有rp*Sp ≡ 1 (mod p)&#xff0c;用擴展GCD求出rp就行了。…

java equals 的區別_java中equals和==的區別是什么-百度經驗

在jdk1.5以上的版本中&#xff0c;基本類型和封裝類能自動轉化&#xff0c;與String類型的對象和字符串常量類似。Integer i1 123; Integer i2 123 int i 123; Integer i3 new Integer(123); Integer i4 new Integer(123); …

ps命令使用 進程查看

ps命令是Process Status的縮寫用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照&#xff0c;就是執行ps命令的那個時刻的那些進程&#xff0c;如果想要動態的顯示進程信息&#xff0c;就可以使用top命令。使用該命令可以確定有哪些進程正在運行和運行的狀態…

stm32例程_如何學習STM32?

閱讀全文大約10min//封面為我現在使用的STM32型號&#xff1a;旗艦版 Stm32f103ZE//本文內容是對正點原子的資料整理參考資料&#xff1a;CM3權威指南/CM4權威指南&#xff08;ARM提供&#xff09;芯片參考手冊 STM32F10x中文參考手冊 芯片數據手冊 STM32F103xCDE_DS_CH_V5.pdf…

java compile_java中的CompileAPI入門及使用

介紹java5之前我們可以通過java提供的tools.jar來操作java編譯器&#xff0c;java6提供了新的API&#xff0c;讓我們可以更方便的調用。包名為javax.tools。使用通過文件編譯String filePath "D:\\Client.java";//獲取java編譯器JavaCompiler javaCompiler ToolPro…

《Two Days DIV + CSS》讀書筆記——CSS選擇器

1.1.2 CSS選擇器 CSS 選擇器最基本的有四種&#xff1a;標簽選擇器、ID 選擇器、類選擇器、通用選擇器。 【標簽選擇器】 一個完整的 HTML 頁面由很多不同的標簽組成&#xff0c;而標簽選擇器&#xff0c;則是決定哪些標簽采用相應的 CSS 樣式&#xff0c;比如&#xff0c;在 s…

TempDB為什么要根據CPU數目來決定文件個數

在SQL Server的世界中&#xff0c;SQL Server在Windows之上有一套自己的任務調度和資源分配系統&#xff0c;這使得SQL Server作為Windows的一個進程&#xff0c;卻可以處理大量的并發&#xff0c;這些任務調度和資源分配非常像一個操作系統&#xff0c;因此SQL Server在Window…

python基礎到實踐_一本書搞定Python入門到實踐

題圖&#xff1a;Photo by Aaron Burden on Unsplash上周介紹了幾本Python從入門到進階書籍&#xff0c;今天推薦一本入門好書《Python編程&#xff1a;從入門到實踐》&#xff0c;適合零基礎小白&#xff0c;也適合有其它語言背景的程序員。書中有哪些亮點&#xff1f;2016年出…

Linux網卡eth0變成eth1修改方法

由于換了主板&#xff0c;集成網卡mac地址變了&#xff0c;70-persistent-net.rules中仍然保留了老網卡的內容&#xff0c;新網卡則被識別為eth1。 將表示老網卡的行注釋掉&#xff0c;然后將表示新網卡的行中eth1改成eth0&#xff0c;在把網卡配置文件ifcfg-eth0的mac地址改成…

java微博模擬登陸_java 模擬登錄新浪微博(通過cookie)

這幾天一直在研究新浪微博的爬蟲&#xff0c;發現爬取微博的數據首先要登錄。本來打算是通過賬號和密碼模擬瀏覽器登錄。但是現在微博的登錄機制比較復雜。通過賬號密碼還沒有登錄成功QAQ。所以就先記錄下&#xff0c;通過cookie直接訪問自己的微博主頁。微博登錄的認證過程微博…

硬盤結構,主引導記錄MBR,硬盤分區表DPT,主分區、擴展分區和邏輯分區,電腦啟動過程...

filex的文件系統看的云里霧里&#xff0c;還是先總結下FAT的一些基本知識吧。硬盤結構硬盤有很多盤片組成&#xff0c;每個盤片的每個面都有一個讀寫磁頭。如果有N個盤片。就有2N個面&#xff0c;對應2N個磁頭(Heads)&#xff0c;從0、1、2開始編號。每個盤片的半徑均為固定值R…

最全面 Nginx 入門教程 + 常用配置解析

轉自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介紹和安裝 一個簡單的配置文件 模塊介紹 常用場景配置 進階內容 參考資料 Nginx介紹和安裝 Nginx是一個自由、開源、高性能及輕量級的HTTP服務器及反轉代理服務器&#xff0c; 其性能與IMAP/POP3代理服務器…

linux 客戶機中不支持 unity_婚姻中的不理解,來源于夫妻雙方情感支持的不同

很多女性在婚姻中往往覺得無法得到丈夫的理解&#xff0c;當遇到一些生活或者工作上的問題的時候&#xff0c;她們想要在情感上得到丈夫的支持和理解。但是很多丈夫對此可能并不了解和理解&#xff0c;更傾向于用理性幫助妻子解決問題。而女性所需要的幫助可能并不是解決問題的…

Linux中使用crontab命令啟用自定義定時任務

一 簡介Linux下的任務調度分為兩類&#xff0c;系統任務調度和用戶任務調度系統任務調度&#xff1a;系統需要定期執行的任務&#xff0c;比如重啟、日志清理等&#xff0c;其配置文件是&#xff1a;/etc/crontab用戶任務調度&#xff1a;某個用戶需要定期執行的任務。用戶可以…

java 循環標記_深入淺析Java 循環中標簽的作用

continue和break可以改變循環的執行流程&#xff0c;但在多重循環中&#xff0c;這兩條語句無法直接從內層循環跳轉到外層循環。在C語言中&#xff0c;可以通過goto語句實現多重循環的跳轉&#xff0c;但在非循環結構中使用goto語句會使程序的結構紊亂&#xff0c;可讀性變差。…

JS,Jquery 調用 C#WebService

1&#xff0c;需要在服務下面把代碼的注釋去掉 // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務&#xff0c;請取消對下行的注釋。   //[System.Web.Script.Services.ScriptService] 2,JS 調用方法如下 var request <?xml version"1.0" encoding"…

iOS tabview 適配問題

ios7的UITableView實現ios6的圓角效果 iOS7 UITableView做成類似iOS6風格 在iOS7的時候我們會發現cell的默認線條會向右偏移&#xff0c;使左邊空出了一些位置&#xff0c;這時候我們可以調用如下的方法來解決。這樣我們的cell就會和iOS6前的一樣鋪滿整個寬度了。 if ([tableVi…