20200117 .net 001

来源:https://www.cnblogs.com/2eggs/archive/2020/01/17/12205249.html
-Advertisement-
Play Games

第一部分:面向對象 封裝 繼承(里氏轉換) 多態第二部分:值類型、引用類型、字元串操作第三部分:集合文件操作第四部分:正則表達式第五部分:XML操作第六部分:委托、事件第七部分:反射。 //存儲著我們當前正在運行的進程//Process[] pro = Process.GetProcesses(); ...


第一部分:面向對象 封裝 繼承(里氏轉換) 多態
第二部分:值類型、引用類型、字元串操作
第三部分:集合文件操作
第四部分:正則表達式
第五部分:XML操作
第六部分:委托、事件
第七部分:反射。

 

1、變數的命名
首先我們要保證的就是變數的名稱一定要有意義(就是我們看到了變數的名字,就知道變數在這段程式中的作用)
Camel:多餘用給變數或者欄位命名,第一個單詞的首字母小寫,其餘每個單詞的首字母大寫。
我們給欄位命名,前面必須加下劃線。
_highSchoolStudent
Pascal:要求我們每個單詞的首字母都要大寫,其餘每個單詞的首字母小寫。
HighSchoolStudent

int max=	GetMax();
int min=	GetMin();


2、進程	
一個應用程式就是一個進程,而一個進程又是由多個線程組成的。
進程幫助我們在記憶體中分配應用程式執行所需要的空間。

//存儲著我們當前正在運行的進程
//Process[] pro = Process.GetProcesses();
//foreach (var item in pro)
//{
// //item.Kill();不試的不是爺們
// Console.WriteLine(item.ProcessName);
//}
//使用進程來打開應用程式
//Process.Start("notepad");//打開記事本
//Process.Start("mspaint");//打開畫圖工具
//Process.Start("iexplore", "http://www.baidu.com");
//Process.Start("calc");//打開計算器
//使用進程來打開文件
//封裝我們要打開的文件 但是並不去打開這個文件
ProcessStartInfo psi = new ProcessStartInfo(@"C:\Users\SpringRain\Desktop\打開文件練習.exe");
//創建進程對象
Process pro = new Process();
//告訴進程要打開的文件信息
pro.StartInfo = psi;
//調用函數打開
pro.Start();
Console.ReadKey();




----> 我們可以通過進程來直接操作應用程式。 3、面向對象複習 類決定了對象將要擁有的屬性和行為。

class BaseFile
{
//欄位、屬性、構造函數、函數、索引器
private string _filePath;
public string FilePath//ctrl+R+E
{
get { return _filePath; }
set { _filePath = value; }
}

//自動屬性 prop+兩下tab
public string FileName { get; set; }

public BaseFile(string filePath, string fileName)
{
this.FilePath = filePath;
this.FileName = fileName;
}


//設計一個函數 用來打開指定的文件
public void OpenFile()
{
ProcessStartInfo psi = new ProcessStartInfo(this.FilePath + "\\" + this.FileName);
Process pro = new Process();
pro.StartInfo = psi;
pro.Start();
}
}

封裝:
--->減少了大量的冗餘代碼
--->封裝將一坨很難理解的功能封裝起來,但是對外提供了一個很簡單的使用介面。我們會使用就OK。
繼承:
--->減少了類中的冗餘代碼
--->讓類與類產生了關係,為多態打下了基礎。
特性:
單根性:一個子類只能有一個父類
傳遞性:爺爺類 爹類 兒子類
里氏轉換:
1、子類可以賦值給父類
2、如果父類中裝的是子類對象,則可以將這個父類轉換為對應的子類對象
---->關鍵字
1、is:返回bool類型,指示是否可以做這個轉換
2、as:如果轉換成功,則返回對象,否則返回null
作用:我們可以將所有的子類都當做是父類來看,針對父類進行編程,寫出通用的代碼,適應需求的不斷改變。	
多態:
--->虛方法
virtual override
--->抽象類
abstract override
--->介面
interface 
4、關鍵字
new
1、創建對象
--->在堆中開闢空間
--->在開闢的堆空間中創建對象
--->調用對象的構造函數
2、隱藏父類的成員	
this
1、代表當前類的對象
2、顯示的調用自己的構造函數
base
1、顯示調用父類的構造函數
2、調用父類的成員



5、抽象類實現多態練習
模擬將外部的移動存儲設備插到電腦上進行讀寫數據。
U盤
Read()
Write()
移動硬碟
Read();
Write();
MP3
Read();
Write();
PlayMusic();
手機....平板電腦......


6、介面
---->介面是一種能力
---->介面也是一種規範
---->如果你繼承了這個介面,就必須按照介面的要求來實現這個介面。
interface I開頭...able結尾


7、石頭剪刀布案例
玩家
--->出拳的方法,是我們指定的
電腦
--->出拳的方法,隨機的
裁判
--->判斷輸贏或者平手

石頭1 剪刀2 布3
玩家贏:石頭1 剪刀2 =-1 剪刀2 布3 =-1 布3 石頭1=2
平手:玩家-電腦=0;
電腦贏:

 

8、訪問修飾符
public private internal protected protected internal
public:在哪都可以訪問
private:私有的,只能在當前類的內部進行訪問
internal:只能在當前程式集中訪問。
protected:受保護的,可以在當前類以及該類的子類中訪問

註意點:
1、能夠修飾類的訪問修飾符只有兩個:public internal(預設就是internal)。
2、在同一個項目中,public的許可權跟internal是一樣的。
3、子類的訪問許可權不能高於父類。
 

  

 

1、導入命名空間
	命名空間就是類的"文件夾"。類就是"文件夾"中的文件。需要導入命名空間
	添加引用:
		如果我需要在一個項目中,訪問另一個項目中的某一個類
			--->添加對另一個項目的引用
			--->導入命名空間


2、靜態和非靜態
	靜態成員:被static修飾
	實例成員:不被static修飾
	靜態成員先於實例成員被載入到記憶體中,只有創建了對象,才有實例成員。
	靜態類中只能存在靜態成員
	調用:
		靜態成員調用:
			類名.靜態成員名;
		實例成員調用:
			實例名.實例成員;(實例就是我們的對象)
	什麼時候使用靜態?
		---->作為工具類
		---->在整個項目中資源共用,正因為它是資源共用的,所以靜態成員必須要等到整個項目都結束的時候
		才會被資源釋放。
		在我們的項目中應該儘可能的少使用靜態成員。
		繼承是創建對象的過程。
3、設計模式
		---->單例設計模式
			在整個程式中,我們要保證對象必須是唯一的。
			實現:
				---->第一步:構造函數私有化
				---->第二步:聲明一個靜態欄位,作為全局唯一的單例對象
				---->第三步:聲明一個靜態函數,返回全局唯一的對象
		---->簡單工廠設計模式
			核心:把所有的子類都當做父類來看待
			練習:
				提示用戶分別的輸入兩個數字:
				再輸入運算符:返回一個計算的父類,並調用方法得到結果。
				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、StringBuilder
	它就是拼接字元串的一個工具,拼成完成後,還是需要將它轉回字元串。


2、ref參數
	ref參數側重於將一個值帶到函數中進行改變,再講改變後的值帶出去。ref參數在函數內不用賦值
	函數外必須為ref參數賦值。

3、out參數

4、params可變參數	


5、集合的學習
	非泛型集合
		ArrayList
		Hashtable
	泛型集合
		List<T>
		Dictionary<Tkey,Tvalue>

6、裝箱和拆箱
   裝箱:值類型---->引用類型
   拆箱:引用類型--->值類型
   我們判斷是否發生了拆箱或者裝箱,首先要判斷這兩種數據類型是否存在繼承關係。
   你裝箱的時候拿什麼類型裝的箱,你拆的時候,就得拿什麼類型去拆。
   
   
   
7、List<T>常用的函數
Add():添加單個元素
AddRange():添加一個集合
Insert():插入一個元素
InsertRange():插入一個集合
Remove():移除指定的元素
RemoveAt():根據下標移除元素
RemoveRange():移除一定範圍內的元素
ToArray():集合轉換成數組
ToList():數組轉換成集合 


8、編碼格式
將字元串是怎樣的形式保存為二進位。
ascii 256

6000 GB2312
GBK  GB18030

ISO
	Unicode
		utf-16
		utf-8
出現亂碼的原因:我們保存這個文件的時候採取的編碼跟打開這個文件的時候採取的編碼格式不一致。



文本文件:拖到txt中還能看得懂得就是文本文件。

  

 


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

-Advertisement-
Play Games
更多相關文章
  • 之前接手老項目的時候有遇到一些的方法參數中使用了ref關鍵字加在傳參的參數前面的情況。對於新手,這裡介紹和講解一下ref的用法和實際效果。 CLR中預設所有方法的參數傳遞方式都是傳值,也就是說不管你傳遞的對象是值類型還是引用類型,在作為參數傳入到方法中時,傳遞的是原對象的副本。無論在方法中對該對象做 ...
  • 這幾天,對程式重構,主要針對angularjs的綁定: 第一個例子: 下麵是一段html程式: 不管是name或者是ng-model的屬性值,它都有一定規律"StartX"和"EndX" 後面的數字是連續的序號。 我們可以使用ASP.NET MVC的Razor的語法@for來簡化它們: @{ for ...
  • C#實現的Check Password,並根據輸錯密碼的次數分情況鎖定賬戶:如果輸入錯誤3次,登錄賬戶鎖定5分鐘並提示X點X分後重試登錄。如果5分鐘後再次輸入,累計輸入錯誤密碼累計達到5次。則賬戶會被永久鎖定,需聯繫系統管理員進行把資料庫中的輸入錯誤的次數(errorcount)進行清零解鎖才能登陸 ...
  • [TOC] MVC "MVC 維基百科,自由的百科全書" MVC 是軟體工程的一種軟體架構模式,它不是具體的技術,而是一種代碼分層的理念,主要體現了職責分離原則。 M Model 模型 V View 視圖 C Controller 控制器 對 MVC 的誤解及緣由 誤解:頁面視圖 = View ,E ...
  • 簡介 Orleans用起來的確很爽,更爽的是咱們有能監控它的工具。 " OrleansDashboard " 這個工具是一個可視化的Silo監控工具,Silo和Grain的活躍狀態一目瞭然,各個介面的響應速度也可以很清晰的統計到。 安裝 使用NuGet引用 然後修改 的配置,添加Dashboard: ...
  • Teigha中實體旋轉 代碼: using (var trans = database.TransactionManager.StartTransaction()) { Entity ent = trans.GetObject(entityId, OpenMode.ForWrite) asEntit ...
  • 什麼是AutoMapper?AutoMapper是一個簡單的小型庫,用於解決一個看似複雜的問題 - 擺脫將一個對象映射到另一個對象的代碼。這種類型的代碼是相當沉悶和無聊的寫,所以為什麼不發明一個工具來為我們做? 我們來看看在.netcore3.1中怎樣使用AutoMapper9.0。 Profile ...
  • 程式處理存放圖片的幾種方式 我的理解有4個: 1:放在項目本身得文件夾中,直接部署到伺服器上 2:存放在磁碟中,然後資料庫中存放路徑,讀取得時候傳路徑。這個適合小項目 3:將圖片轉換成二進位文件,但是不建議這樣做,因為會給資料庫造成壓力。 4:存放在雲存儲器上,也是在資料庫上存地址,不過是雲地址,使 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...