2012.7.24---C#(2)

??? 學習過了C#的基本屬性函數后,接下來的學習我覺得比較重要。C#是一種面向對象的語言,下面復習一下面向對象中的一些名詞。 ??? 類:把一些系列東西,把他們的共同的屬性和方法抽象出來,給他起一個名字就是XXX類。類中定義的靜態的就是屬性 ,動態的方法就是功能?。

??? 對象:凡是能夠看得見摸得著的東西就是對象,說白了就是某個類里面的一個具體的東西(成員)。在現實生活中是先有對象再有類的,萬物皆對象。。但是在程序里是先有類再有對象的。C#是面向對象編程的,在程序中,一切運行的基本單位都是對象。類的定義格式:[訪問修飾符] class 類名 {//類體? } 在程序里面有且只能有一類包含Main方法,這個類稱之為主類。 ???

?? int,byte,long都是一個數據類型---整數類型,class也是一個數據類型--類類型,interface是一個數據類型但他是接口類型。本身類就是一個數據類型---類類型,有這個類定義的對象是這個類型的變量。?? ???

?? ?創建對象過程是:就是把類里面所有的東西賦值一份,放到對象的內存空間中。那么對象方式屬性和方法是自己內存空間中的。一個類可以創建n個對象,那么n個對象之間是沒有任何的關系,唯一是他們產生于一個類。 類創建對象的格式如:

???????????????????? ?類名 對象名 = new 類名(); ????

類中的屬性是對成員變量的一個封裝,使得這個變量具有了讀和寫的權利。一般情況下,成員變量是私有類型,只能在類的內部使用。一般情況,屬性都是用public來修飾。如果在類的外面使用,則應該把成員變量封裝成屬性。格式如下: ???

?????? ?public 類型 屬性名 ???

?????? ?{ ?get{return 成員變量;} ?

?????????? set{成員變量=value;}

??????? }? ??

訪問修飾符一般有public和private,其中public:共有的,在哪里都能夠用的方法;private:私有的,只能在類的內部使用,也就是對象的內存空間中使用。由private定義的變量和方法,對象不能夠直接對其調用。但是可以通過間接來訪問。 ???

?????? 注意:以后我們所說的對象,成員和實例都代表一個意思,也就是 對象===成員===實例,從而可知:成員的變量=實例的變量=對象的變量,不難知道成員方法=成員函數=成員功能,成員方法的書寫格式如下: ???

???????????? [訪問修飾符] 返回值 函數名(參數列表) { } ???

??? 構造函數是用來創建對象的。構造函數開辟出一個內存空間,這個空間放在堆里面。此時,對象就指向了這個內存空間,然后類里面的東西復制到這個空間中。構造函數是一個特殊的函數,沒有返回值,構造函數名必須和類名一樣。構造函數除了用來創建對象之外,還起到以下作用:初始化成員變量,使對象的多元化。默認情況下,系統會為類提供一個空的構造函數:public 類名(){}。一旦為類增加了構造函數,那么系統就不會為這個類添加一個默認的構造函數。一般情況下他的書寫格式如下:[訪問修飾符] 類名(構造函數名)(參數列表){? }? ????

??????? 建議:無論在什么情況下,必須顯示定義一個空的構造函數。 ????

????函數重載指得是函數可以具有相同的方法名,但是參數的類型,個數,順序不一樣的函數互為函數的重載。函數的重載是因為功能一樣,但是處理的內容和方式不一樣。函數的重載前提條件是函數必須在同一個類里面。 ????

?? ?this關鍵字,this指的就是當前對象。使用this關鍵字可以使得參數見名知意,同時起到了成員變量和參數之間的區別。值得注意的是this關鍵字是多態的。 ???

?? static關鍵字,通過static關鍵字修飾方法,變量,屬性都是屬于類的。只能通過類來調用,不能通過對象來訪問。凡是通過static關鍵字修飾的方法,只能夠調用有static修飾的方法和變量。但是不能夠直接調用成員的變量和方法。那么成員的方法可以直接的調用Static修飾的方法和變量。建議直接通過類名來訪問Static修飾的變量和方法。static修飾的變量和方法在內存中只創建一次。直到程序退出,才會消失。也就是說是誰的誰調用。 ??

?????? C#的一些新特性: ??????

????? 1,屬性:可以直接寫屬性,而不需要成員變量,get和set也不需要實現。 ??????

    2,創建對象:在創建對象的時候,可以直接給屬性賦值。如: People p = new People(){Name="",Age=90}; ??????

    3,通過var關鍵字來標示任何類型的變量,但是不是說就是若類型語言, 但是,Var定義的變量只能夠在方法里面使用。。如: var s = "sss"; ?????? var p = new People(); ???

????? 4,匿名對象:可以通過new 關鍵字來創建一個匿名對象,這個對象沒有類型。屬性可以隨意定義。注意,匿名對象只能通過Var關鍵字定義的變量來接受。 ?????

???? C#的繼承:繼承是用來擴展自身的功能。通過關鍵符號“:”來實現繼承,以下這些名詞意思都是相等的 父類=基類=超類=base class;子類=sub類=派生類。繼承中的構造函數,默認情況下,子類中的構造函數調用的是父類的空的構造函數。如果父類中沒有空的構造函數,那么子類的構造函數必須顯示的調用父類中的某一個構造函數。 ????

??? ?base關鍵:base指得是父類對象。如果base放在子類構造函數后,則base調用的是父類的構造函數。如果base在普通方法中,則指的是創建的父類對象,可以調用父類對象中的方法和屬性。 ???

?? 方法的重寫:由于父類的方法不能夠完成某種功能,單還必須調用這個方法,則子類可以重寫這個方法,加強其功能。在父類里面,如果一個函數可以讓子類重寫,必須在在方法的前面用vritual關鍵來修飾。說明這個方法可以被子類重寫。同理如果在子類里面,要重寫父類的方法,則應在方法前面加上override關鍵字,說明這個方法是重寫父類的。重寫方法的要求是必須有繼承,重寫的方法和被重寫的方法必須一模一樣。 ???

??? 多態是一個事物可以同時具有多種較色,但是在某一種特殊的場合只表現出一中。其中比較重要的兩種轉型得需要我們深入的理解一下,我就是在這方面對多態有些概念的模糊,不過通過老師的深入解析漸漸的也就參透了其中的意思。 ????

? (1),上轉型: 把子類對象賦值給父類對象,稱之為上轉型。他的原理:實際上是把子類對象中的父類對象賦值了父類,此時的賦值語句兩邊的類型是相同的。此時,這個父類對象能夠調用的方法是:自己的方法和已經重寫過的方法,如果方法沒有被子類重寫,那么調用的還是自己的方法。他的用途是方便同一標準,根據具體實現不同,而調用不同的方法,從而實現不同的功能和樣式。

如:        WuDang w = new People(); ?????

     ?????? w.sing();//已經重寫的方法。 ???????????

         w.print();//print沒有重寫的方法

????

? (2),下轉型:把已經上轉型的父類對象賦值給子類對象。他的原理:就是把已經上轉型后的父類對象所對應的原來的子類對象在賦值給子類對象。此時,這個對象能夠調用的方法是自身的方法,繼承來得方法和已經重寫過得方法。 注意,下轉型需要通過顯示的類型轉換。如:People pp = (People) w; ????

?? 注意:C#中只支持單繼承,一個類只能有一個直接的父類。 ??? 抽象類是類的一種特殊類,他沒有構造函數不可以創建對象。他的書寫格式如: ?????????????

??????? ?[訪問修飾符] abstract class 類名

     { //擁有了普通類出構造函數外的任何東西 ??

      //還可以有抽象函數 ??????????????

      } ????

??? sealed關鍵字:如果sealed修飾的是類,則這個類是無法被繼承,不能當父類;如果sealed修飾方法,則子類是無法重寫這個方法的。 ????

??? interface接口是為了解決多繼承的問題而誕生的一種特殊的“類”,接口里面只能寫方法的定義和屬性的定義。在接口中的方法定義前面不能含有public,子類在實現接口的方法是,不能使用override關鍵字。他的書寫格式如: ?????

        ? pubilc interface 接口名?{?}?? ????

   注意:如果一個類同時要繼承類也要實現結構,那么父類要寫在前面,接口在后。 ????

?? ?protected關鍵字:由protected關鍵字修飾的變量和方法只能在本類和子類中去使用,不能通過對象來訪問。 ????

?? ?namespace命名空間是為了解決重名的問題,方便管理類而產生的,命名空間只能夠放,類,接口,枚舉,結構體,委托 而不能有方法,變量的。命名空間是可以嵌套的,命名空間于物理路徑沒有關系,只和邏輯上有關系。他的書寫格式如:

         namespace 名字{? }??? ???

??? enum枚舉:把有限的元素放在一起。使用字母代替數字標示的含義。枚舉是一個值類型。

下面是一個很容易理解的繼承例子,他幫助我很明了的理解C#的繼承關系:

using System;
public class StudyExtend1
{public static void Main(){People p = new People("ss");p.Test();p.TaiJi();
} }
public class WuDang {private string name;public WuDang(){}public WuDang(string name){Console.WriteLine("I'm First!");}public WuDang(int age){Console.WriteLine("I'm First!");}public WuDang(string name,int age){}public string Name{get{return this.name;}set{this.name = value;}}public void Taiji(){Console.WriteLine(this.name);Console.WriteLine(this.GetType());} } //People繼承了武當 public class People : WuDang {public People(string name):base("ss",67){Console.WriteLine("I'm Second!");}public void Test(){base.Taiji();base.Name ="ss";}}

?

?

?

?

?

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/lan-net/archive/2012/07/29/2614344.html

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

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

相關文章

匯編語言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )

1 : 基礎匯編語言展示 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov eax,5add eax,6INVOKE ExitProcess,0 main ENDP END main2:基礎匯編語言展示增加變量的訪問 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dw…

<各國地圖輪廓app>技術支持

如在app使用過程中遇到任何問題,請與開發者聯系caohechunhotmail.com

Java BigDecimal longValueExact()方法與示例

BigDecimal類longValueExact()方法 (BigDecimal Class longValueExact() method) longValueExact() method is available in java.math package. longValueExact()方法在java.math包中可用。 longValueExact() method is used to convert this BigDecimal to an exact long val…

c#中的多線程同步

在處理多線程同步問題的時候,我們一般有臨界區,互斥量,信號量和消息機制等幾種解決方案,在c#中可以非常方便的使用它們來實現進程的同步。下面我就常用的lock,Monitor和Mutex幾種來說明如何實現進程的同步。 lock和Monitor依靠一種…

ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“

windows下: ffplay 提示"SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can’t initialize audio client" 添加環境變量:SDL_AUDIODRIVERdirectsound

js 正則表達式,正整數

var ss "3.333";var type /^[0-9]*[1-9][0-9]*$/;var re new RegExp(type);alert(ss.match(re));if (ss.match(re) null) {alert("請輸入大于零的整數!");return;} 轉載于:https://www.cnblogs.com/lingxzg/archive/2012/08/02/2620543.html

java 根據類名示例化類_Java即時類| EpochSecond()方法的示例

java 根據類名示例化類EpochSecond()方法的即時類 (Instant Class ofEpochSecond() method) Syntax: 句法: public static Instant ofEpochSecond(long sec_val);public static Instant ofEpochSecond(long sec_val, long nanos_adjust);ofEpochSecond() method is…

java中Date()類型輸入數據的處理

對于Date類型的數據,需要輸入生日存入相應數據庫中 private Date birthday;// 生日package com.pdsu.mybatis.pojo;import java.io.Serializable; import java.util.Date;public class User implements Serializable {/*** */private static final long serialVers…

(擴展)歐幾里德快速冪

GCD模板 __int64 gcd(__int64 a,__int64 b) {return b0? a:gcd(b,a%b); } 歐幾里德算法又稱輾轉相除法,用于計算兩個整數a,b的最大公約數。其計算原理依賴于下面的定理: gcd函數就是用來求(a,b)的最大公約數的。 gcd函數的基本性質: gcd(a,…

匯編語言-002(.data、Equal、$、EQU 、MOV 、MOVSX、MOVZX)

1:變量相加程序 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data firstval DWORD 20002000h secondval DWORD 11111111h thirdval DWORD 22222222h sum DWORD 0.code main PROCmov eax,firstvaladd eax,secondvaladd eax,thirdvalm…

\r與\n的區別,\r\n與\n或\r的區別(C語言/C#)

本文出處http://topic.csdn.net/t/20020718/07/882679.html 原作者:triout(笨牛) \r表示回車,\n表示換行,我們按回車按鈕的時候,系統自動產生回車和換行兩個字符: 回車僅僅是表示完成,把光…

通過ID查詢一個用戶的兩種開發方法

通過ID查詢一個用戶的兩種開發方法 數據庫建表sql語句如下:https://github.com/beyondyanyu/Sayingyy/blob/master/JDBC2-數據庫sql建表語句 ①,原始Dao開發: UserDao.java(接口): package com.pdsu.mybatis.dao;i…

duration java_Java Duration類| minusMinutes()方法與示例

duration java持續時間類minusMinutes()方法 (Duration Class minusMinutes() method) minusMinutes() method is available in java.time package. minusMinutes()方法在java.time包中可用。 minusMinutes() method is used to subtract the given duration in minutes from t…

Silverlight + WCF異步調用 例子

看大家好像對我的NParsing框架不是很感興趣(寫NParsing帖沒人頂我),那就給大家來點“甜品”,換換口謂。來說說Silverlight方面的東西。 在Silverlight中數據通信只能用異步。有人會覺得寫起來很麻煩,其實不然。也有很簡…

我博客主頁的搜索功能怎么不好用

用博客里面的搜索功能,“找找看”,搜索我博客里面的關鍵字,但是不能出現結果。但是我在別人的主頁上能夠搜索該人的內容,能夠查詢到記錄,難道博客園對每個博客的信息要先排序?目前我的還不在他的搜索數據庫…

小議SqlMapConfig.xml配置文件

①、mybatis-3-config.dtd 主要用于mybatis的核心配文件sqlMapConfig.xml的約束 sqlMapConfig.xml代碼如下&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&q…

ffmepg 命令提取音視頻數據

原文件&#xff1a; 1&#xff1a; 原音頻數據提取&#xff08;保留還是mp4的封裝格式的&#xff09;&#xff1a; ffmpeg -i test_1920x1080.mp4 -acodec copy -vn audio.mp4 -vn 就是沒有視頻&#xff0c; -acodec copy 音頻拷貝不進行任何轉碼 原視頻數據提取&#xff0…

Java BigInteger類| modInverse()方法與示例

BigInteger類modInverse()方法 (BigInteger Class modInverse() method) modInverse() method is available in java.math package. modInverse()方法在java.math包中可用。 modInverse() method is used to calculate the mod inverse by using the inverse of (this BigInteg…

【7】jQuery學習——入門jQuery選擇器之過濾選擇器-可見性過濾選擇器

這篇什么都不說&#xff0c;看標題就知道了&#xff0c;很簡單&#xff0c;就2個選擇器&#xff0c;嘿嘿 選擇器描述返回$("Element:hidden")選取所有不可見的元素集合元素$("Element:visible")選取所有可見元素集合元素這篇很簡單吧&#xff0c;就2個&…

Creating an undraggable TitleWindow container in Flex (轉載)

The following examples show how you can create an undraggable TitleWindow container by setting the isPopUp property to false on the TitleWindow instance. <?xml version"1.0" encoding"utf-8"?><!-- http://blog.flexexamples.com/2…