C#入門經典學習階段小結(淩亂)

來源:互聯網
上載者:User
CLR: common language runtime(.net 公用語言運行庫)管理.net庫開發的所有應用程式的執行

CTS: common type system (一般型別系統)指定最基本類型有助於使用.NET Framework的各種語言之間進行互動操作
CIL:common intermediate language (通用中繼語言) 編譯代碼為該語言,CIL代碼獨立於電腦、os、cpu的,由JIT編譯器使用建立所需的機器碼
JIT: just in time (CIL代碼僅在需要時才編譯)
Managed 程式碼:將代碼編譯為CIL,儲存在程式集中,再用JIT編譯器將它編譯為本機所需代碼,還需要管理正在執行的用.NET Framework編寫的代碼。

建立.NET應用程式所需步驟:
->使用C#編寫應用程式代碼
->把代碼編譯為CIL,儲存在程式集中
->執行代碼時,必須使用JIT編譯器將代碼編譯為機器碼
->在託管的CLR環境下運行機器碼

重設vs c#development settings設定:錯誤 1: 為“CoffeeScript”[代碼 5297] 匯入設定時出錯。

逸出序列 例如用\“來轉義“雙引號,用\n是分行符號的逸出序列
字串插入:如輸出Console.WriteLine($"{outline}");
運算子優先順序:++,--用作首碼,(),+,-一元時,!,~
*,/,%
+,-
<<,>>
<,>,<=,>=
==,!=
&
^
|
&&
||
=,*=,/=,%=,+=,-=,<<=,>>=,&=,^=,|=
++,--用作尾碼

C#的分支技術:三元運算子,if語句,switch語句
switch語句在C++中可以運行完一個case語句後運行另一個case,但在C#中這樣做是非法的,每個case語句需要一個break中斷switch執行
另外可以使用return語句,不僅中斷switch結構,還中斷當前函數的執行;還可以用goto語句
三種迴圈:do迴圈,while迴圈,for迴圈
迴圈的中斷命令:break,continue,return

使用checked設定溢出檢查上下文

枚舉:枚舉值轉換為其他類型,需要顯式轉換

用replace("str1","str2"),替換函數,用str2替換字串中所有的str1
<string>.Trim()命令,刪除空格,可以添加char數組定義刪除字元,測試代碼時發現trim()出現問題,反而trim(mycahr),[]mychar={' '}

引用傳遞參數 ref關鍵字,改變調用的參數值,必須使用初始化之後的‘非常量const’的變數。
或者使用輸出參數 out關鍵字,可以使用未賦值的變數,函數使用out時必須將其看作尚未賦值。
static關鍵字定義全域變數,const定義全域常量

函數的簽名包含函數的名稱及其參數,不包含其傳回型別
委託:一種儲存函數引用的類型,不帶函數體,使用delegate關鍵字,委託聲明指定了一個傳回型別和一個參數列表

類:理解為車規劃圖紙,對象:理解為汽車本身。
類決定了對象將要擁有的屬性和行為。
class progrem
{ //可以寫欄位、函數、屬性、建構函式。。
//欄位:儲存資料 屬性:保護欄位 get set (對自動屬性進行保護的時候需要執行個體化) 函數:描述對象的行為 建構函式:初始化對象,給對象的每個屬性進行賦值
}

傳智播客 基礎加強1:
oop:
封裝:
--->減少了大量的冗餘代碼
--->封裝將一坨很難理解的功能封裝起來,但是對外提供了一個很簡單的使用介面。我們會使用就OK。
繼承:
--->減少了類中的冗餘代碼
--->讓類與類產生了關係,為多態打下了基礎。
特性:
單根性:一個子類只能有一個父類
傳遞性:爺爺類 爹類 兒子類
裡氏轉換:
1、子類可以賦值給父類
2、如果父類中裝的是子類對象,則可以將這個父類轉換為對應的子類對象
---->關鍵字
1、is:返回bool類型,指示是否可以做這個轉換
2、as:如果轉換成功,則返回對象,否則返回null
作用:我們可以將所有的子類都當做是父類來看,針對父類進行編程,寫出通用的代碼,適應需求的不斷改變。
多態:
--->虛方法
virtual override
--->抽象類別
abstract override
--->介面
interface

關鍵字
new
1、建立對象
--->在堆中開闢空間(對象是參考型別,參考型別的值都在堆裡)
--->在開闢的堆空間中建立對象
--->調用對象的建構函式
2、隱藏父類的成員 (當子類的函數名和父類一樣時)
this
1、代表當前類的對象
2、顯示的調用自己的建構函式
base
1、顯示調用父類的建構函式(並不是父類的對象)
2、調用父類的成員

靜態建構函式只能在以下情況下執行:
*建立包含靜態建構函式的類執行個體時
*訪問包含靜態建構函式的類的靜態成員時

string和object是簡單的參考型別,數組是隱式的參考型別,建立的每個類都是參考型別
編譯器不允許衍生類別的可訪問性高於基類。
介面的指定必須放在基類繼承之後,用逗號隔開。
介面沒有關鍵字abstract和sealed(它們不包含實現代碼,不能直接執行個體化,且必須是可以繼承)。介面不是類,所以沒有繼承System.Object

system.Object包含的方法:
Equals() bool
ReferenceEquals() bool:比較傳送給它的兩個對象,是不是同一個執行個體的引用
ToString() String:返回對應於對象執行個體的字串
MemberwiseClone() object:建立一個新對象執行個體並複製成員,以複製該對象
GetType() System.Type:返回物件類型(typeof運算子:可以把類名轉換為System.Type對象)
GetHashCode() int:返回一個以壓縮形式表示對象狀態的值

建構函式初始化器,它把代碼放在方法定義的冒號後面。例如可在衍生類別的建構函式定義中指定所使用的基類建構函式。
用base()關鍵字指定.NET執行個體化過程使用基類中具有指定參數的建構函式

定義不能建立的類:將其定義為靜態類,或者將其所有的建構函式定義為私人。
不能建立的類可通過它們擁有的靜態成員來使用。

對於ArrayList集合,使用對象的Add()方法添加新項;

yield 迭代

封箱是把實值型別轉換為System.Object類型,或者轉換為由實值型別實現的介面類型。拆箱則相反。
作用:它允許在項的類型是object的集合中使用實值型別,其次,有一個內部機制允許在實值型別上調用object方法。

is運算子:<operand> is <type> 注意如果<type>是一個實值型別,而<operand>也是該類型,或者可以拆箱到該類型裡,則為true。

不能重載賦值運算子,例如+=,也不能重載&&和||

IComparable在要比較的對象的類中實現,可以比較該對象和另一個對象:提供CompareTo(),int,接受一個對象
IComparer在一個單獨的類中實現,可以比較任意兩個對象:提供Compare(),int,接受兩個對象
類Comparer提供了ICompare介面的預設實現方式:Comparer.Default.Compare(one,two)。CaseInsensitiveComparer類:不區分大小寫

聲明可空類型: int? nullableInt; int?是System.Nullable<int>的縮寫,更便於讀取

空合并運算子??與空條件運算子?.可以在結果是null時候設定一個預設值:
int? count=customer.order?.Count() ?? 0;
另外,空條件運算子的另一個用途是觸發事件。

協變、抗變:
泛型型別參數定義為協變,加out關鍵字,反之,抗變用in關鍵字

傳智播客:
1、匯入命名空間
命名空間就是類的"檔案夾"。類就是"檔案夾"中的檔案。需要匯入命名空間
添加引用:
如果我需要在一個項目中,訪問另一個項目中的某一個類
--->添加對另一個項目的引用
--->匯入命名空間

2、靜態和非靜態
靜態成員:被static修飾
執行個體成員:不被static修飾
靜態成員先於執行個體成員被載入到記憶體中,只有建立了對象,才有執行個體成員。
靜態類中只能存在靜態成員
調用:
靜態成員調用:
類名.靜態成員名;
執行個體成員調用:
執行個體名.執行個體成員;(執行個體就是我們的對象)
什麼時候使用靜態?
---->作為工具類,比如所有的擴充方法!都需要static
---->在整個項目中資源共用,正因為它是資源共用的,所以靜態成員必須要等到整個項目都結束的時候
才會被資源釋放。
在我們的項目中應該儘可能的少使用靜態成員。
繼承是建立對象的過程。
3、設計模式
---->單例設計模式
在整個程式中,我們要保證對象必須是唯一的。
實現:
---->第一步:建構函式私人化
---->第二步:聲明一個靜態欄位,作為全域唯一的單例對象
---->第三步:聲明一個靜態函數,返回全域唯一的對象
樣本:
//第一步:建構函式私人化
private Form2()
{
InitializeComponent();
}

//第二部:聲明一個靜態欄位用來儲存全域唯一的表單對象
private static Form2 _single = null;
//第三步:通過一個靜態函數返回一個全域唯一的對象
public static Form2 GetSingle()
{
if (_single == null)
{
_single = new Form2();
}
return _single;
}
---->簡單工廠設計模式
核心:把所有的子類都當做父類來看待
練習:
提示使用者分別的輸入兩個數字:
再輸入運算子:返回一個計算的父類,並調用方法得到結果。
Add Sub Cheng Chu
建築行業最早應用到設計模式這個概念
1、註冊一個公司

2、招兵買馬
3、投標買地
4、安排施工隊開始施工
5、賣樓
設計模式就是用來專門解決一些特定的問題。
4、類庫
.dll檔案,我們使用類庫來協助我們封裝一些常用的功能
5、實值型別和參考型別
實值型別:int double char bool decimal struct enum
參考型別:string 數組 自訂類 介面 委託
實值型別的值儲存在記憶體的棧上,參考型別的值儲存在堆中。
棧上儲存資料的效率要高於堆。

值傳遞:把實值型別作為參數傳遞,把值本身進行傳遞。
注意:
ref可以把值傳遞改變為引用傳遞。
引用傳遞:把參考型別的值作為參數傳遞,傳遞的是引用。

6、字串的學習
重要特性:
不可變性,我們不管對字串做什麼操作,都會在記憶體中產生一塊新的執行個體。
駐留池
我們可以將一個字串看作是char類型的唯讀數組。
GC:Garbage Collection記憶體回收 ,每隔一段時間,會掃描整個記憶體,發現,如果有的空間沒有被指向。則立即把它銷毀。

1.說明字串的不可變性2.字串常量的“暫存池”特性。

String 字串,字串可以看成字元數組,不可變特性(通過for迴圈,修改string中的元素,失敗!)。
屬性
Length //獲得字串中字元的個數。”aA我你他”→5
方法
IsNullOrEmpty() 靜態方法,判斷為null或者為”” (靜態方法)
ToCharArray() 將string轉換為char[]
ToLower() 小寫,必須接收傳回值。(因為:字串的不可變);
ToUpper() 大寫。
Equals() 比較兩個字串(地址/對象的狀態,而==是比較對象引用)是否相同。忽略大小寫比較,StringComparation.
//對於string類型而言,不管是等號還是Equals比較的都是值本身。
//Equals預設比較的是地址,但是我們在自己定義的類中如果用到Equals,都會將Equals進行重寫,使之按照我們自己的需求進行比較
IndexOf() 如果沒有找到對應的資料,返回-1.//面試題:統計一個字串中,”天安門”出現的次數。
LastIndexOf() 如果沒有找到對應的資料,返回-1
Substring() //2個重載,截取字串。
Split() //分割字串。
Join() 靜態方法
Replace()

對象初始化器:採用非預設的建構函式/不必添加額外代碼,為每個屬性使用索引值對提供其值。
合并對象、集合初始化器(適合於LINQ技術一起使用)(編譯器為在集合初始化器中提供的每一項調用集合的Add()方法)

var關鍵字,隱式推理變數類型,可以是int、string、數組(數字值從來都不會被解釋為可空類型,除非是定義new int?[ ] )等等
如果要在資料存放區對象中修改屬性的值,就不能使用匿名型別(因為被定義為唯讀屬性)

dynamic關鍵字,動態變數類型,

選擇性參數,沒有預設值的參數不能放在有預設值參數的後面。

具名引數,參數順序任意並且可選。但如果混合使用具名引數和位置參數,就必須包含所有的位置參數,其後是具名引數。

Lambda運算式:是一個委託,賦給一個委託類型的變數;解釋為運算式樹狀架構
表現: 括弧中的參數列表=>C#語句/{多行代碼+如果還不是void的委託,需要加return}
LINQ架構套件含一個泛型類,可用於封裝Lambda運算式,使用該類的一種方式是提取用C#編寫的Lambda運算式,將它轉換為相應的SQL指令碼

擴充方法Aggregate(),表示把一個累加器函數應用於集合中從開始到結束的每對元素上。

傳智播客 基礎加強3:
1、StringBuilder:進行大量字串操作的時候的工具。String對象是不可變的。
將StringBuilder轉換為String用ToString();
僅僅是拼接字串的工具,大多還會轉換為String
*StringBuilder sb=new StringBuilder();
*sb.Append();//追加字串
*sb.ToString();//ToString("x2"),表示轉換為16進位,並且是兩位的。
*sb.Insert();
*sb.Replace();
使用程式拼接html中的table:WPF中沒有表單應用程式的DocumentText,只能使用webBrow.NavigateToString(sb.ToString());
2、out:out參數側重於在函數中返回多個值;參數要求必須在方法的內部為其賦值
3、ref參數:ref參數側重於將一個值帶澳函數中進行改變,再講改變後的值帶出去。ref參數在函數內不用賦值,函數外必須為ref參數賦值
4、
5、集合的學習:
非泛型集合:
ArrayList
Hashtable
泛型集合:
List<T>:相對於數組,不用確定初始範圍
Capcity:集合中可以包含的元素的個數(初始值為4,每次翻倍)
Count:擷取集合中實際包含的元素的個數
Add():添加單個元素
AddRange():添加一個集合
Insert():插入一個元素
InsertRange():插入一個集合
Remove():移除指定的元素
RemoveAll():裡面是lambda運算式,例如list.RemoveAll(n => n > 3)凡是大於3的資料全部刪除
RemoveAt():根據下標移除元素
RemoveRange():移除一定範圍內的元素
ToArray():集合轉換成數組
ToList():數群組轉換成集合

Dictionary<Tkey,Tvalue>
6、裝箱和拆箱:
裝箱:實值型別--->參考型別
拆箱:參考型別--->實值型別
我們判斷是否發生了拆箱或者裝箱,首先要判斷這兩種資料類型是否存在繼承關係。
裝箱的時候用什麼類型裝的箱,拆的時候就拿什麼類型拆。
7、編碼格式:
將字串是怎樣的形式儲存為二進位。
ascii 256
6000 GB2312
GBK GB18030

ISO
Unicode
utf-16
utf-8
出現亂碼的原因:我們儲存這個檔案的時候採取的編碼跟開啟這個檔案的時候採取的編碼格式不一致。
文字檔:拖到txt中還能看得懂得就是文字檔。
.txt .html .ini .xml
File的基本操作:操作檔案
Exist():判斷指定的檔案是否存在
Create():建立
Move():剪下
Copy():複製
Delete():刪除
ReadAllLines() ReadAllText()預設採用的編碼格式是utf-8
Directory:操作的是檔案夾
CreateDirectory:建立一個新的檔案夾
Delete:刪除
Move:剪下
Exist()判斷指定的檔案夾是否存在
GetFiles()獲得指定目錄下所有檔案的全路徑
Directory.GetFiles(@"E:\download", "*.avi")獲得所有的.avi檔案
GetDirectories()獲得指定目錄下所有的檔案夾
只能獲得當前第一目錄下所有的檔案夾
Regex 主要類:Regex
就是一個模板,我們可以使用這個模板,去一坨字串中找到我們想要的資料。
注意:Regex是操作字串的。
組成:
限定符,元字元,常用的運算式
判斷是否匹配:Regex.IsMatch("字串","Regex");
字串提取:Regex.Match("字串","要提取的字串的Regex");
(迴圈提取所有):Regex.Matches()
字串替換:Regex.Replace("字串","正則","替換內容");
.+? 匹配大量字元
(?<名字> ) 可以給括弧匹配部分起名
貪婪模式:
"1111。11。11。11111。"
貪婪: .+。 儘可能多的匹配
非貪婪: .+?。儘可能的少匹配,1個

樣式:大量設定要應用到控制項上的某些屬性
模板:在其基礎上設定控制面板的控制項
觸發器:
要定義Tigger對象監視的屬性,應使用Trigger.Property屬性
要定義何時啟用Trigger對象,應設定Trigger.Value屬性
要定義Trigger觸發的操作,應將Trigger.Setters屬性設定為Setter對象的一個集合
動畫:通過故事板建立,storyboard對象包含在資源字典中,必須通過x:Key屬性來識別

不含主要畫面格的時間軸:DoubleAnimation、PointAnimation和ColorAnimation

相依性屬性:輸入propdp+兩下Tab鍵,即可插入屬性模板

XML:可擴充的標記語言
與HTML的區別:XML中的元素必須關閉!XML中元素的屬性必須用引號
文法規範:標籤(Tag)、嵌套(Nest)、屬性。
標籤(即元素Element)要閉合,屬性值要用“”包圍,標籤可以互相嵌套。
在XML中是節點(Node)包含元素(Element)。
大小寫敏感
建立XML:DOM文件物件模型
XmlDocument doc=new XMLDocument();
XmlElement order = doc.DocumentElement;//根節點
使用XPath查詢XML:
XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");
根節點不允許刪除,即doc.RemoveAll();不可以
但是order.RemoveAll();可以,移除根節點下的所有子節點
刪除子節點:ITems.RemoveChild(xn);
刪除某節點的屬性值:xn.Attributes.RemoveNamedItem("Count");

ctrl+K和S/X,快速鍵插入程式碼片段/外側代碼,比如#region

委託delegate:使用委託把一個函數作為參數傳遞
函數可以直接賦值給一個委派物件 委託的簽名必須跟函數的簽名一樣(即傳回值和參數類型一致)
DelSayHi del = SayHiChinese;//new DelSayHi(SayHiChinese);
對比: 委託是不安全的,
事件本身是一個安全的委託

定義事件:
public delegate void delTest(); //註冊事件時需要一個委託
public event delTest eventTest; //不要小括弧
註冊事件:
eventTest += new delTest(method1);
eventTest += new delTest(method2);
總結:
委託的作用:
佔位,在不知道將來要執行的方法的具體代碼時,可以先用一個委託變數來代替方法調用(委託的傳回值和參數列表要確定)
事件的作用:
事件的作用與委託變數一樣,只是功能上比委託變數有更多限制。
比如:一、只能通過+=或-=來Binder 方法,二、只能在類內部調用(觸發)事件。

程式集的好處:
程式中只引用必須的程式集,減少程式的尺寸;
程式集可以封裝一些代碼,只提供必要的提供者。


第16章:
云:只是運行在一個資料中心的大量商品化的電腦硬體,這個資料中心可以運行程式,儲存大量資料。
具有彈性,即動態向上擴充的能力(例如增加記憶體和CPU)和/或動態向外擴充的能力(增加虛擬伺服器執行個體的數量)
雲端服務模式:
1、基礎設施即服務(IaaS):要從作業系統開始向上負責。
2、平台即服務(PaaS):值負責運行在所選作業系統上的程式及其依賴項。
3、軟體即服務(SaaS):通過互連網訪問的裝置上使用的一個軟體程式或服務。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.