C#複習④

来源:http://www.cnblogs.com/zpfbuaa/archive/2016/06/16/5590961.html
-Advertisement-
Play Games

方法、函數、過程、靜態變數、類、結構體、構造函數、析構函數、運算符重載、索引器、類型轉換重載、嵌套類型 ...


C#複習④

2016年6月16日

12:37

Main Classes and Structs 類和結構體

1.Contents of Classes

欄位,常量,方法,構造函數,析構函數;

特性,事件,索引器,重載運算符;

嵌套類型(類,介面,結構體,枚舉類型,委托)

clip_image002

2.Classes 類

棧類:數組、棧指針、構造函數、壓棧、出棧

clip_image003

類實例對象分配在堆上;

類對象必須通過new關鍵字實例化;

類可以繼承自其他類(C#不支持多繼承);

類可以實現多個介面(C#支持多個介面繼承)

clip_image005

3.Structs 結構體

點結構體:點坐標(x,y)、構造函數、MoveTo方法

clip_image006

結構體實例對象分配在棧上;

可以通過new關鍵字構造實例對象;

欄位在聲明時禁止初始化;

不能聲明無參構造函數;

不能繼承其他結構體或被繼承,但是可以實現多個介面

clip_image008

4.Visibility Modifiers 可見性修飾符

Public visible where the declaring namespace is known 在當前命名空間下可見

Private only visible in the declaring class or struct僅在類或結構體定義域內可見

類和結構體預設的欄位均為private,方法預設為public

clip_image009

5.Fields and Constants 欄位和常量

· 在類中,欄位在聲明時初始化是一個可選的(可以初始化,如果沒有初始化則編譯器會進行預設的初始化);

· 對於常量,在聲明時必須進行初始化,否則編譯時會報錯;

· Readonly 欄位必須在聲明時初始化或者在構造函數中進行初始化;數值咋編譯時期不可參與運算;數值在之後不可改變;占用記憶體空間

clip_image011

6.靜態欄位和常量

靜態欄位屬於類不屬於實例對象(在類沒有實例化任何對象時,靜態欄位已經產生,靜態欄位是這個類的固定屬性,可以被通過該類構造的所有對象共用)

常量不能夠聲明為靜態

static readonly需要註意的一個問題是,對於一個static readonly的Reference類型,只是被限定不能進行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的。

clip_image013

推薦:http://www.c-sharpcorner.com/UploadFile/2072a9/constant-vs-readonly-vs-static-keywords-in-C-Sharp/

clip_image014

7.Methods 方法、函數、過程

方法:可能有返回值也可能沒有返回值

過程:沒有返回值

函數:有返回值

clip_image016

8.Static Methods 靜態方法

靜態方法實現對靜態欄位的處理

clip_image018

9.Parameters 參數

兩種傳參方式:值傳遞、引用傳遞

用Ref型參數時,傳入的參數必須先被初始化。而Out則不要要,對Out而言,就必須在方法中對其完成初始化。

用Ref和Out時都必須註意,在方法的參數和執行方法時,都要加Ref或Out關鍵字,以滿足匹配。

Out更適合用在要要Return多個返回值的地方,而Ref則用在要要被調出使用的方法修改調出使用者的引用的時候。

ref修飾符:參數可進可出

out修飾符:參數只出不進

10.Variable Number of Parameters 可變數組參數

C#語法規定,params後邊必定跟數組。

作用是把不定數量的、同類型的參數裝入這個數組中

string也是object的子類,所以可以用一個object[]數組代替string[]

clip_image019

11.Method Overloading 方法重載

方法重載:在一個類中兩個或者兩個以上的方法具有相同的函數名

並且滿足參數不同或者參數類型不同或者 不同參數定義(out/ref)成為方法的重載。

重載不要求函數返回類型不同,也就是說當兩個函數只有返回類型不同時不滿足重載的條件!

滿足條件的重載:

clip_image021

Illegal overloading:

clip_image023

12.Constructors for Classes 類的構造函數

類的構造函數有可見性修飾符,沒有返回值,且函數名與類名相同;

當聲明類時若不主動添加構造函數,則編譯時編譯器會自動添加一個預設的構造函數,並且這個構造函數無參。

當聲明一個類的時候手動添加了構造函數,那麼編譯器不再為該類添加無參構造函數,也就是之後在實例化對象時手動調用無參構造函數會報錯。

一個類可以有多個構造函數,這些構造函數沒有返回值,並且函數名相同。按照之前的重載定義,一個類中的所有構造函數互為重載函數

對於構造函數,可以選擇對欄位進行初始化。當未初始化時,預設的構造函數會按照下麵的規則進行對各個欄位的初始化。

clip_image024

clip_image026

clip_image028

13.Constructor for Structs 結構體的構造函數

結構體的構造函數有可見性修飾符,沒有返回值,構造函數名與結構體名相同;

對每一個結構體都會有一個預設的無參構造函數;

程式員不能為結構體創建一個帶參的構造函數;

結構體的構造函數必須初始化所有的欄位

clip_image030

14.Static Constructors 靜態構造函數

靜態構造函數必須是無參的,沒有可見性修飾符;

一個類或者結構體有且只能有一個靜態構造函數;

靜態構造函數用來初始化靜態欄位;

當該類型被第一次使用時,靜態構造函數立刻被調用

clip_image032

15.Destructors 析構函數

在一個實例對象被垃圾回收之前調用析構函數;

析構函數沒有可見性修飾符;

結構體沒有析構函數;

clip_image033

16.Indexers 索引器

索引器包括可見性修飾符、返回值、函數名、索引類型

clip_image035

clip_image036

17.Operator Overloading 運算符重載

運算符重載需要註意對某個運算符重載後要對其相應的另一個運算符重載。比如重載了加法運算符,相應的也要重載減法運算符;

可以被重載的運算符:

數學運算符:+、-、*、/、%、++、--

關係運算符:==、!=、<、>、<=、>=

位運算符:&、|、^

其他運算符:!、~、>>、<<、true、false

重載運算符必須返回一個函數值;

clip_image038

18.Conversion Operators 類型轉換重載

顯式類型轉換 Explicit conversion

隱式類型轉換 Implicit conversion

推薦:https://msdn.microsoft.com/en-us/library/09479473(v=VS.80).aspx

class SampleClass
{
public static explicit operator SampleClass(int i)
{
SampleClass temp = new SampleClass();
// code to convert from int to SampleClass...

return temp;
}
}

clip_image040

19.Nested Types嵌套類型

內部類可以訪問外部類的所有成員變數和成員函數;

外部類之能訪問內部類中可見性為public的成員變數和成員函數;

只有當內部類為public時,其他類才可以訪問;

訪問內部類需要通過外部類名加上點運算符 "."加上內部類名

clip_image042


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Linux系統上,一個檔案能不能被執行看的是有沒有可執行的那個許可權(x),不過,Linux系統上真正認識的可執行文件其實是二進位文件(binary program),例如/usr/bin/passwd 這些檔案就是二進位程式代碼。 怎麼產生一個可執行的二進位程式呢?首先寫程式,用字處理器寫完的程式 ...
  • EPEL 是什麼? EPEL (Extra Packages for Enterprise Linux,企業版Linux的額外軟體包) 是Fedora小組維護的一個軟體倉庫項目,為RHEL/CentOS提供他們預設不提供的軟體包。這個源相容RHEL及像CentOS和Scientific Linux這 ...
  • http://pan.baidu.com/s/1pLByvUF ...
  • 在使用第三方類庫時,使用cocoaPods是非常方便的,具體使用方法可以參考:CocoaPods安裝和使用教程 的安裝使用方法。今天討論的問題是,我在使用的時候遇到了一些問題:用cocoaPod sinstall完成所需要的第三方類庫之後,在要用的地方導入(#import)發現不提示,雖然自己手寫之 ...
  • 在Linux中要修改一個文件夾或文件的許可權我們需要用到linux chmod命令來做. 語法如下: 命令中各選項的含義為 操作符號可以是: 設置mode所表示的許可權可用下述字母的任意組合: X 只有目標文件對某些用戶是可執行的或該目標文件是目錄時才追加x 屬性。 實例 修改文件可讀寫屬性的方法 例如 ...
  • 一. 準備工作 下載nsis相關工具包,點擊此下載 1. 安裝程式:nsis-2.46-setup.exe 2. 編輯程式:cnisedit203.exe 3. 幫助文檔:NSIS205幫助文檔.rar 4. 第三方庫:ExecCmd.dll、AddPath.nsh、WriteEnvStr.nsh ...
  • 我們知道,現在能調試.net程式通常有兩個,第一個是ILSpy,還是一個是Reflector,這兩個小反編譯軟體算是我們研究底層代碼中所擁有的一把 鋒利小尖刀~~~,比如你看到的ILSpy這樣的界面圖: 但是呢!!! 用過ILSpy的同學大概都知道,這個毛軟體是調試不了web代碼的。。。也只能調試調 ...
  • 一直以來苦苦尋求適合自己的ORM,之前也用過Entity Framework、ormlite、nhibernate、dapper,都感覺準備步驟繁瑣,除非公司提前已經搭建起來一套成熟的框架,那樣只能做下添肉的工作,短時間內不能獨立搭建。--廢話終止 直接上圖: 就這麼簡單。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...