《C#從入門到放棄》
版本 |
作者 |
參與者 |
完成日期 |
備註 |
YanlzVR_C#_V01_1.0 |
嚴立鑽 |
|
2020.04.25 |
|
|
|
|
|
|
##《C#從入門到放棄》發佈說明:
++++“C#從入門到放棄”:是對“C#”的基礎探索;【VR雲遊戲】:Unity+SteamVR+雲技術+5G+AI:其中Unity主要開發語言就是C#,所以在進入Unity開發前先對C#進行一輪基礎夯實;
++++“C#從入門到放棄”:定位在一個科普類知識,“從入門到放棄”是一個系列,是最基礎的,也是最有參考價值的!
@@提示:有些博客可能只是開了頭,如果感興趣的同學,可以“點贊”或“評論區留言”,只要關注的同學多了,那就會繼續完善喲!(“++==”,表示沒有寫完的,如果關注度不高就不完善了;“++ok++”,表示此篇博客已經完成,是階段性完整的!)
$$$$博客溯源:
&&&&“從入門到放棄”系列:
++++【C#從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/105757329
++++【Linux從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967
++++【C++從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/103849127
++++【Python從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/101393069
++++【Qt從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/100904511
++++VR雲遊戲=Unity+SteamVR+雲技術+5G+AI;(說明:AI人工智能不是我們的主要研究技術,只是瞭解一下,領略一下有風的感覺!但是,VR是我們的研究重點)
++++【Unity開發基礎】分類:https://blog.csdn.net/vrunsoftyanlz/category_7309057.html
++++【Linux系統編程】分類:https://blog.csdn.net/vrunsoftyanlz/category_9694767.html
++++【C++C鑄就生存利器】分類:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分類:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立鑽哥哥CSDN空間】:https://blog.csdn.net/VRunSoftYanlz/
##《C#從入門到放棄》目錄
#第一篇:C#基礎篇
#第二篇:C#提高篇
#第三篇:C#項目篇
#第四篇:C#在Unity中的應用篇
#第五篇:C#在遊戲服務器應用篇
#第六篇:C#系統安全篇
#第七篇:立鑽哥哥帶您C#從入門到放棄
#第一篇:C#基礎篇
#第一篇:C#基礎篇 |
#第一篇:C#基礎篇
++++立鑽哥哥:C#是微軟公司發佈的一種簡潔的、面向對象的且類型安全的程序設計語言;C#應用領域比較廣泛,可以進行遊戲軟件開發、桌面應用系統開發、智能手機程序開發、多媒體系統開發、網絡應用程序開發以及操作系統平臺開發等;因C#語言簡單易學,功能強大,所以受到很多程序員的青睞,成爲程序開發人員使用的主流編程語言之一;
++1.1、基本數據類型
++1.2、分支結構
++1.3、C#循環和一維數組
++1.4、C#二維數組
++1.5、枚舉與結構體
++1.6、類和麪向對象編程
++1.7、屬性、引用數據類型和方法參數
++1.8、字符串、方法的重載和遞歸
++1.9、C#面向對象
++1.10、抽象類,靜態類與單例
++1.11、接口與泛型
++1.12、C#集合
++1.13、C#委託
++1.14、程序設計6大原則
++1.15、23種設計模式
##1.1、基本數據類型
##1.1、基本數據類型 |
++1.1、基本數據類型
++++1.1.1、先來了解一下C#
++++1.1.2、一個簡單的程序分析HelloWorld
++++1.1.3、基本數據類型
++++1.1.4、常量、變量、運算符、表達式、語句
++++1.1.5、基本輸入、輸出函數
++++1.1.6、類型轉換
####1.1.1、先來了解一下C#
++++1.1.1、先來了解一下C# |
++1.1.1、先來了解一下C#
++++立鑽哥哥:C#是微軟公司發佈的一種面向對象的、安全的、穩定的、簡單的、優雅的編程語言;
++Unity使用C#開發
++++立鑽哥哥:Unity3D引擎就是用C#開發的,所以熟悉C#非常重要;
主流引擎 |
主流開發語言 |
其他 |
Unity3D |
C# |
Boo、UnityScript已棄用 |
虛幻4 |
C++ |
大型遊戲開發 |
Cocos2dx |
C++、Lua、JavaScript |
主要是2D遊戲開發 |
###1.1.2、一個簡單的程序分析HelloWorld
###1.1.2、一個簡單的程序分析HelloWorld |
++1.1.2、一個簡單的程序分析HelloWorld
++++立鑽哥哥:
using System;
namespace MyHelloWorld{ class MainClass{ public static void Main(string[] args){ Console.Write(“立鑽哥哥:Hello World!”); } } } |
###1.1.3、基本數據類型
###1.1.3、基本數據類型 |
++1.1.3、基本數據類型
++++立鑽哥哥:
關鍵字 |
字節大小 |
說明 |
bool |
1字節 |
邏輯真(真/假) |
btye |
1字節 |
無符號8位整數 |
char |
2字節 |
16位字符類型 |
short |
2字節 |
有符號16位整數 |
int |
4字節 |
有符號32位整數 |
float |
4字節 |
32位單精度浮點類型 |
double |
8字節 |
64位雙精度浮點類型 |
long |
8字節 |
有符號64位整數 |
###1.1.4、常量、變量、運算符、表達式、語句
###1.1.4、常量、變量、運算符、表達式、語句 |
++1.1.4、常量、變量、運算符、表達式、語句
++++立鑽哥哥:
++++[常量]:程序運行期間,不能被改變的量;
++++[變量]:程序運行期間,可以被改變的量;
++++[變量定義]:類型修飾符 變量名 = 初始值;(string name = “立鑽哥哥”;)
++++[運算符]:賦值運算符(“=”),算術運算符(“+、-、*、/”等);
++++[表達式]:由常量、變量與運算符組成;
++++[語句]:語句是程序執行的最小單位,以分號結尾;
###1.1.5、基本輸入、輸出函數
###1.1.5、基本輸入、輸出函數 |
++1.1.5、基本輸入、輸出函數
++++立鑽哥哥:System.Console類;
++++[輸出函數]:Console.WriteLine(“立鑽哥哥:Hello World!”);
++++[輸入函數]:Console.Read();/Console.ReadLine();
###1.1.6、類型轉換
###1.1.6、類型轉換 |
++1.1.6、類型轉換
++++立鑽哥哥:類型轉換分爲:隱式轉換、強制轉換;
++++[隱式轉換]:由小到大轉換時系統會自動的進行隱式轉換;
++++[強制轉換]:由大變小轉換時要用強制轉換;(會缺失精度)
##1.2、分支結構
##1.2、分支結構 |
++1.2、分支結構
++++1.2.1、bool布爾類型
++++1.2.2、關係運算符
++++1.2.3、邏輯運算符
++++1.2.4、if語句
++++1.2.5、switch語句
###1.2.1、bool布爾類型
###1.2.1、bool布爾類型 |
++1.2.1、bool布爾類型
++++立鑽哥哥:布爾類型的變量只有true和false兩個值;
bool isBoy = true;
if(isBoy){ Console.Write(“男孩喜歡妹子”); }else{ Console.Write(“美女喜歡買包包,包治百病!”); } |
###1.2.2、關係運算符
###1.2.2、關係運算符 |
++1.2.2、關係運算符
++++立鑽哥哥:常用的關係運算符有:>、<、>=、<=、==、!=等;
###1.2.3、邏輯運算符
###1.2.3、邏輯運算符 |
++1.2.3、邏輯運算符
++++立鑽哥哥:常用的邏輯運算符有:&&(邏輯與)、||(邏輯或)、!(邏輯非);
###1.2.4、if語句
###1.2.4、if語句 |
++1.2.4、if語句
++++立鑽哥哥:if語句屬於分支結構;
++++[if語句第一種形式]:if(條件表達式){ 語句1; }
++++[if語句第二種形式]:if(條件表達式){ 語句1; }else{ 語句2; }
++++[if語句第三種形式]:
if(條件表達式1){ 語句1; }else if(條件表達式2){ 語句2; }else{ 語句3; } |
###1.2.5、switch語句
###1.2.5、switch語句 |
++1.2.5、switch語句
++++立鑽哥哥:多分支語句,通過判斷表達式的值,來決定執行哪個分支;
++++[switch通常與case配合使用]:switch開關;case情況;
switch(表達式){ case 值1: { 語句1; break; } case 值2: { 語句2; break; } ... case 值n: { 語句n; break; } default:{ 語句n+1; break; } } |
++++提示1:switch(表達式)裏面的表達式類型不能是浮點類型;
++++提示2:case後面只要有操作,最後一定要加break;
##1.3、C#循環和一維數組
##1.3、C#循環和一維數組 |
++1.3、C#循環和一維數組
++++1.3.1、循環結構
++++1.3.2、一維數組
###1.3.1、循環結構
###1.3.1、循環結構 |
++1.3.1、循環結構
++++立鑽哥哥:循環結構是在滿足某個條件的時候反覆執行一個語句序列(循環);
++++[三種循環結構]:while循環;do-while循環;for循環;
++++[break]:跳出本層循環;
++++[continue]:結束本次循環;
++while循環
++++立鑽哥哥:條件表達式爲真,執行循環體;一旦條件表達式爲假,循環停止;
while(bool表達式){ 循環體; } |
++do..while循環
++++立鑽哥哥:先執行循環體,再判斷循環條件,直到條件不滿足的時候,循環結束;
do{ 循環體; }while(條件表達式); |
++for循環
++++立鑽哥哥:循環條件爲真,執行循環體;
for(循環變量初始化; 循環條件; 循環增量){ 循環體; } |
###1.3.2、一維數組
###1.3.2、一維數組 |
++1.3.2、一維數組
++++立鑽哥哥:數組用來存儲相同類型的數據;每個成員稱爲一個數組元素;
++++數組定義:int[] number; float[] scores; string[] names;
++動態初始化
++++立鑽哥哥:藉助new運算符爲數組元素分配內存空間,並賦初值;
int[] intArray = new int[6]; int[] intArray = new int[3]{ 1, 2, 3 }; int[] intArray = new int[]{ 1, 2, 3 }; |
++靜態初始化
++++立鑽哥哥: 數據類型[] 數組名 = { 元素1, 元素2, ..., 元素n };
int[] myArr = { 1, 2, 3, 4, 5}; |
##1.4、C#二維數組
##1.4、C#二維數組 |
++1.4、C#二維數組
++++1.4.1、冒泡排序
++++1.4.2、選擇排序
++++1.4.3、二分查找
++++1.4.4、二維數組
++++1.4.5、foreach循環
###1.4.1、冒泡排序
++1.4.1、冒泡排序
++++立鑽哥哥:冒泡排序算法原理:比較相鄰的元素,如果第一個比第二個大,就交換它們兩個;
for(int i = 0; i < nums.Length - 1; i++){ for(int j = 0; j < nums.Length - 1 - i; j++){ if(nums[j] > nums[j+1]){ int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } |
##1.5、枚舉與結構體
##1.5、枚舉與結構體 |
++1.5、枚舉與結構體
++++1.5.1、枚舉
++++1.5.2、結構體
++++1.5.3、訪問修飾符
###1.5.1、枚舉
###1.5.1、枚舉 |
++1.5.1、枚舉
++++立鑽哥哥:枚舉類型:定義了一組可以賦值給變量的命名整數常量提供了一種有效方法,枚舉是一種值類型;
++++[格式]:enum 枚舉名{ 枚舉數0, 枚舉數1, ... }
++++例如:enum Season{ Spring, Summer, Autumn, Winter }
###1.5.2、結構體
###1.5.2、結構體 |
++1.5.2、結構體
++++立鑽哥哥:結構體是一種值類型,通常用來封裝小型相關變量組;
++++結構體是一種自定義的數據類型,相當於一個複合容器,可以存儲多種類型;
++++結構體由結構體成員構成:包含字段,屬性與方法;
++++[格式]:struct 結構體名{ 結構體成員 }
struct Weapon{ public string name; public int physicalDefense; public int maxHp; } |
++++提示:字段不能有初始值,只能聲明;
###1.5.3、訪問修飾符
###1.5.3、訪問修飾符 |
++1.5.3、訪問修飾符
++++立鑽哥哥:訪問修飾符:所有類型和類型成員都具有可訪問性級別;
++常用訪問修飾符
++++[public]:同一程序集中的任何其他代碼或引用該程序集的其他程序集都可以訪問該類型或成員;
++++[private]:只有同一類或結構中的代碼可以訪問該類型或成員;
++++[protected]:只有同一類或結構或者此類的派生類中的代碼纔可以訪問的類型或成員;
##1.6、類和麪向對象編程
##1.6、類和麪向對象編程 |
++1.6、類和麪向對象編程
++++1.6.1、面向對象
++++1.6.2、類
++++1.6.3、對象
++++1.6.4、字段
++++1.6.5、方法
###1.6.1、面向對象
###1.6.1、面向對象 |
++1.6.1、面向對象
++++立鑽哥哥:[面向過程]VS[面向對象];
++[面向過程]
++++立鑽哥哥:面向過程是以事件爲中心,強調的是完成某一件事情需要哪些步驟以及步驟的先後順序;
++++比如:把大象放進冰箱,總共分爲三步:
--第一步:把冰箱門打開;
--第二步:把大象放進冰箱;
--第三步:關上冰箱門;
++++代表語言:C語言;
++[面向對象]
++++立鑽哥哥:面向對象以對象爲中心,強調完成某一件事情需要哪些對象相互協作來完成,參與該事情的對象需要具備哪些功能; 該事件也是所有事件當中的某一小功能;
++++比如:將大象放進冰箱強調事物的參與者:就是 冰箱與大象;
++++代表語言:C++、C#、Java等;
###1.6.2、類
###1.6.2、類 |
++1.6.2、類
++++立鑽哥哥:類是描述具有相同特徵與行爲的事物的抽象;
++++類是一種構造,通過該構造可以將不同類型的變量,方法組合在一起創建出自定義類型;
++++類是面向對象程序設計實現信息封裝的基礎;
++類的聲明
++++立鑽哥哥:class關鍵字用於類的聲明;
++++[格式]: 訪問修飾符 class 類名{ 類成員變量 }
namespace YanlzFramework{ public class MyClass{ } } |
###1.6.3、對象
###1.6.3、對象 |
++1.6.3、對象
++++立鑽哥哥:對象是類的具體實例,萬事萬物皆對象;
++++類是對象的類型;
++對象的創建
++++立鑽哥哥:對象的創建使用new關鍵字;
++++[格式]: 類名 對象名 = new 類名();
MyHero hero = new MyHero(); |
###1.6.4、字段
###1.6.4、字段 |
++1.6.4、字段
++++立鑽哥哥:字段是用來描述類的特徵的;
++++[格式]: 訪問修飾符 字段類型 字段名;
++++[聲明並初始化]: 訪問修飾符 字段類型 字段名 = 初始值;
class MyHero{ public string name; public int HP; public string type; } |
++字段的使用
++++立鑽哥哥:字段的使用要通過對象: 對象.字段;
MyHero hero = new MyHero(); hero.name = “立鑽哥哥”; hero.HP = 9999; hero.type = “坦克”; |
###1.6.5、方法
###1.6.5、方法 |
++1.6.5、方法
++++立鑽哥哥:方法是用來描述類當中的行爲的;
++++方法就是封裝了一段有特定功能的代碼段,是對象用來實現某個功能的;
++++方法是用來描述類的行爲的;(字段是用來描述類的特徵的)
##1.7、屬性、引用數據類型和方法參數
##1.7、屬性、引用數據類型和方法參數 |
++1.7、屬性、引用數據類型和方法參數
++++1.7.1、屬性
++++1.7.2、引用數據類型
++++1.7.3、方法參數
###1.7.1、屬性
###1.7.1、屬性 |
++1.7.1、屬性
++++立鑽哥哥:屬性提供靈活的機制來讀取、編寫或計算某個私有字段的值;
++++屬性(訪問器)本質上也是Get和Set方法,只是在形式上不同;
class MyHero{ private string name; public int Name{ get{ return name; } set{ name = value; } } } |
++++屬性的簡寫方式: public string Name{ get; set; }
###1.7.2、引用數據類型
###1.7.2、引用數據類型 |
++1.7.2、引用數據類型
++++立鑽哥哥:引用類型在堆中分配空間,由程序員用“new”來分配空間;
++++引用類型包括:Object、string、類、接口、委託、數組等;
++++C#中兩種數據類型: 引用類型 和 值類型;
###1.7.3、方法參數
###1.7.3、方法參數 |
++1.7.3、方法參數
++++立鑽哥哥:方法參數有 形式參數(形參) 和 實際參數(實參);
class MyMath{ //形式參數(形參) public void Swap(ref int x, ref int y){ int temp = x; x = y; y = temp; } } |
MyMath myMath = new MyMath(); int scoreA = 80; int scoreB = 100;
//實際參數(實參) myMath.Swap(scoreA, scoreB); |
++引用參數
++++立鑽哥哥:值類型參數要想達到引用類型參數的效果,需要用到引用參數;
++++引用參數用 ref修飾符聲明;
++++注意: ref修飾的變量在傳遞參數前一定要有初始值;
++輸出參數(out)
++++立鑽哥哥:如果想要一個方法返回多個值,可以用輸出參數來處理;
++++輸出參數由 out關鍵字標識;
public void Calculate(int a, int b, out int x, out int y){ x = a - b; y = a + b; } |
++++注意1:在方法中out修飾的參數必須先初始值,才能使用;
++++注意2:out修飾的變量在傳遞前,可以沒有初始值;
++數組參數(params)
++++立鑽哥哥:
public void Sum(parmas int[] a){ int result = 0; foreach(int x in a){ result += x; }
Console.WriteLine(“立鑽哥哥:結果爲 ” + result); } |
myMath.Sum(1, 2, 3, 4, 5, 6); |
++++params數組參數的注意點:
--1、params參數的長度可變;長度可以爲0;
--2、只能使用一次,而且要放到最後;
--3、數組類型不能跟 ref、out一起搭配使用;
++C#中方法的4種參數類型
++++[值類型]:不附加任何修飾符;
++++[輸出參數]: 以out修飾符聲明,可返回一個或多個值給調用者;
++++[引用參數]: 以ref修飾符聲明;
++++[數組參數]: 以params修飾符聲明;
##1.8、字符串、方法的重載和遞歸
##1.8、字符串、方法的重載和遞歸 |
++1.8、字符串、方法的重載和遞歸
++++1.8.1、string字符串
++++1.8.2、StringBuilder類
++++1.8.3、重載
++++1.8.4、遞歸
###1.8.1、string字符串
###1.8.1、string字符串 |
++1.8.1、string字符串
++++立鑽哥哥:System.String類是以一個專門存放字符串的類,允許字符串進行許多操作;
方法 |
作用 |
Format |
格式化包含各種值的字符串和如何格式化每個值的說明符 |
Insert |
把一個字符串實例插入到另一個字符串實例的指定索引處 |
Replace |
用另一個字符或子字符串替換字符串中給定的字符或子字符串 |
ToLower |
把字符串轉換爲小寫形式 |
ToUpper |
把字符串轉換爲大寫形式 |
###1.8.2、StringBuilder類
###1.8.2、StringBuilder類 |
++1.8.2、StringBuilder類
++++立鑽哥哥:StringBuilder類通常分配的內存會比它需要的多,對字符串的修改就在賦予StringBuilder實例的內存中進行,這就大大提高了追加子字符串和替換單個字符的效率;
###1.8.3、重載
###1.8.3、重載 |
++1.8.3、重載
++++立鑽哥哥:方法重載是指在同一個類中方法同名,參數不同,調用時根據實參的形式,選擇與他匹配的方法執行操作的一種技術;
++++重載主要是參數不同:類型不同;個數不同;順序不同;(返回值不同不能構成重載)
###1.8.4、遞歸
###1.8.4、遞歸 |
++1.8.4、遞歸
++++立鑽哥哥:遞歸:函數體內調用本函數自身,直到符合某一條件不再繼續調用;
++遞歸滿足的條件
++++條件1:有反覆執行的過程(調用自身)
++++條件2:有跳出反覆執行過程的條件(函數出口)
//斐波那切數列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... public static int MyFibonacci(int n){ if(n < 0){ return -1; } if(0 == n){ return 0; } if(1 == n){ return 1; }
return MyFibonacci(n - 1) + MyFibonacci(n - 2); } |
##1.9、C#面向對象
##1.9、C#面向對象 |
++1.9、C#面向對象
++++1.9.1、構造函數
++++1.9.2、面向對象程序設計
++++1.9.3、面向對象的三大特徵
###1.9.1、構造函數
###1.9.1、構造函數 |
++1.9.1、構造函數
++++立鑽哥哥:構造函數的作用就是創建類或結構的實例,在實例化對象的時候,也就是new MyClass()時調用;
++++構造函數可以快速的構建對象,在構造函數中做些初始化字段的功能;
class MyPerson{ public string name; pubic int age;
public MyPerson(){ } } ++++構造函數(方法)必須與類重名; ++++構造函數沒有返回值,但可以有形參; ++++構造函數可以有重載;
|
//帶有參數的構造函數 public MyPerson(string name, int age){ this.name = name; this.age = age; }
|
//構造函數實例化對象 MyPerson p1 = new MyPerson(); MyPerson p2 = new MyPerson(“成龍大哥”, 56); |
###1.9.2、面向對象程序設計
###1.9.2、面向對象程序設計 |
++1.9.2、面向對象程序設計
++++立鑽哥哥:面向對象是爲了解決系統的可維護性,可擴展性,可重用性;
++++面向對象是把構成問題事物分解成各個對象,建立對象的目的不是爲了完成一個步驟,而是爲了描述某個事物在整個解決問題步驟中的行爲;
###1.9.3、面向對象的三大特徵
###1.9.3、面向對象的三大特徵 |
++1.9.3、面向對象的三大特徵
++++立鑽哥哥:面向對象的三大特徵:封裝、繼承、多態;
++[封裝]
++++立鑽哥哥:封裝就是將數據或函數等集合在一個個的類中;
++++封裝是實現面向對象程序設計的第一步,找到變化並且把它封裝起來,可以在不影響其他部分的情況下修改或擴展被封裝的變化部分,這是所有設計模式的基礎,就是封裝變化,因此封裝的作用,就解決了程序的可擴展性;
++++屬性的出現就是爲了保護字段不被外部惡意破壞,這就是封裝:
class MyPerson{ private string name; public string Name{ get{ return name; } set{ this.name = value; } } } |
++[繼承]
++++立鑽哥哥:繼承用於創建可重用,擴展和修改在其他類中定義的行爲的新類;
++++被繼承的類稱爲“基類”,繼承這些成員的類稱爲“派生類”;
++[多態]
++++立鑽哥哥:父類指針指向子類對象;
++++多態指同一個實體同時具有多種形式;
++++基類的需方法用virtual修飾,子類重寫時使用override;
##1.10、抽象類,靜態類與單例
##1.10、抽象類,靜態類與單例 |
++1.10、抽象類,靜態類與單例
++++1.10.1、抽象類
++++1.10.2、靜態類
++++1.10.3、單例
###1.10.1、抽象類
###1.10.1、抽象類 |
++1.10.1、抽象類
++++立鑽哥哥:抽象方法是指只有方法的聲明而沒有具體實現的方法;
++++抽象方法使用關鍵字abstract修飾,這種方法只能聲明返回值類型,方法名以及參數列表,沒有方法體;
++++當一個類中存在抽象方法時,該類必須也使用abstract修飾,就成了抽象類;
abstract class MyPlayer{ public abstract void Practice(); } |
++++抽象方法的訪問修飾符不能爲private,因爲抽象方法必須被派生類重寫,派生類必須能夠訪問到;
++++利用abstract關鍵字可以將方法聲明抽象到父類當中,而方法的實現留在子類,更好的體現“共性放在父類”的原則;
++抽象方法特性:
++++1、抽象方法是隱式的虛方法;
++++2、抽象方法只能有聲明不提供實際的實現;
++++3、抽象方法必須被子類重寫並實現,否則其子類依舊爲抽象類;
++++4、抽象方法不使用static或virtual修飾;
++抽象類的特性:
++++1、抽象類不能使用new關鍵字進行實例化,抽象類是不完整的,只能作爲基類被其他類繼承;
++++2、抽象類除了可以擁有普通類成員外還可以有抽象方法;
++++3、從抽象類派生的非抽象類必須實現抽象類當中的所有抽象方法;
++++4、抽象類不能被實例化但可以有構造方法,構造方法不能爲抽象方法;
++++5、不能使用sealed修飾符修飾抽象類,因爲採用sealed修飾符的類是無法被繼承的,而抽象類是必須被繼承的;
###1.10.2、靜態類
###1.10.2、靜態類 |
++1.10.2、靜態類
++++立鑽哥哥:靜態類用於創建無需創建類的實例就能訪問的數據和函數,靜態類只能包含靜態成員,不可以包含非靜態成員;
++++靜態成員用於分離獨立任何對象標識的數據和行爲:無論對象發生任何改變,這些數據和函數都不會隨之變化;
++++靜態類使用static關鍵字修飾;
//數學運算不依賴任何對象,可以將其定義爲靜態類 static class Mathf(){ public static string mainFunc = “簡單數學運算”; public const int defaultValue = 0; //可以定義const修飾的常量
//求絕對值 public static int MyAbs(int value){ return value > 0 ? value : -value; }
//求兩個整數當中的最小值 public static int MyMinValue(int numA, int numB){ return numA > numB ? numB : numA; } } |
++++訪問靜態類中的成員使用類名加點操作加靜態成員的方式:
int absValue = Mathf.MyAbs(-10); int minValue = Mathf.MyMinValue(20,30); |
++靜態類特性
++++1、靜態類只能包含靜態成員,不能包含非靜態成員;
++++2、靜態類無法實例化;
++++3、靜態類是密封的,無法被繼承;
++++4、靜態不能包含有實例構造函數;
++靜態構造函數
++++立鑽哥哥:靜態類不能有實例化構造函數,但是可以有靜態構造函數;
++++靜態構造函數用於初始化任何靜態數據或用於執行僅需要執行一次的特定操作;
static 類名(){ //初始化靜態數據或執行其他操作 } |
++++靜態構造函數可以出現在非靜態類當中,在非靜態類中除了可以聲明實例構造函數,也可以聲明靜態構造函數:
class MyHero{ //實例構造函數 public MyHero(string name, int HP, string type){ this.name = name; this.HP = HP; this.type = type; }
//靜態構造函數 static MyHero(){ } } |
++++靜態構造函數無法像實例構造函數那樣通過某一個關鍵字調用;靜態構造函數不可被直接調用,當創建類實例或引用任何靜態成員之前,靜態構造函數會被調用;
++靜態構造函數的特性
++++1、靜態構造函數是固定格式,不能有修飾符,不能帶任何參數;
++++2、一個類只能有一個靜態構造函數,即靜態構造函數不可以重載;
++++3、靜態構造函數不可被直接調用,當創建類實例或引用任何靜態成員之前,靜態構造函數會被自動調用,並且只執行一次;
++++4、一個類的靜態構造函數在它的所有派生類的靜態構造函數執行之後執行;
++靜態成員
++++立鑽哥哥:靜態成員變量是和類相關聯的,可以作爲類中“共”有的變量(是一個共性的表現),靜態成員不依賴特定對象的存在,訪問的時候通過類來操作的;
++++靜態成員使用static關鍵字修飾;
public class MyDog{ public static string type = “MyDog”;
public static void WatchDoor(){ Console.WriteLine(“小狗會看門”); } } |
++++訪問靜態成員採用類名加點操作加靜態成員:
MyDog.WatchDoor(); |
++靜態成員的特點
++++1、靜態成員隨着類的加載而加載,無論一個類創建多少個實例,靜態成員都只有一個副本;
++++2、靜態方法可以被重載但不能被重寫,因爲他們是屬於類,不屬於任何的實例;
++++3、靜態成員由類名通過點語法調用,非靜態成員是由對象來調用;
++++4、靜態方法只能訪問靜態成員,包括靜態成員變量和靜態方法;實例方法可以訪問實例成員變量與實例方法,也可以訪問靜態成員;
###1.10.3、單例
###1.10.3、單例 |
++1.10.3、單例
++++立鑽哥哥:設計模式是一套被反覆使用,多數人知曉,經過分類,代碼設計經驗的總結;
++++常用的設計模式有:單例模式,工廠模式,代理模式;
++單例模式的三要素
++++1、單例只能有一個實例;
++++2、單例必須自行創建這個實例;
++++3、單例必須自行向外界提供這個實例;
public class MySingleton{ private MySingleton(){} //構造方法必須私有化 private static MySingleton instance; //定義靜態實例
//靜態構造函數中對靜態實例進行初始化 static MySingleton(){ instance = new MySingleton(); }
//對外提供獲取該實例的接口 public static MySingleton Instance{ get{ if(null == instance){ instance = new MySingleton(); }
return instance; } }
} |
++單例的作用
++++立鑽哥哥:單例模式是資源管理的必備模式,單例類只有一個實例對象,因此可以通過該實例對象獲取到管理的資源;
++++單例模式會阻止其他對象實例化,從而確保所有對象都訪問唯一實例;
++++單例類能夠節省大量創建對象的過程,從而節省內存開銷;
##1.11、接口與泛型
##1.11、接口與泛型 |
++1.11、接口與泛型
++++1.11.1、接口
++++1.11.2、泛型
###1.11.1、接口
###1.11.1、接口 |
++1.11.1、接口
++++立鑽哥哥:接口是一組包含了類或結構可以實現的功能的定義;
++++C#只支持單繼承,所以接口支持多實現的特性可以在一定程度上彌補該不足;
++++[格式]:訪問修飾符 interface 接口名{ 接口成員 }
++++通過interface關鍵字定義接口:
public interface IFly{ void MyFly(); }
public interface ISpeak{ void MySpeak(); } |
++接口的特性
++++1、接口是一個引用類型,只包含了功能的定義,不包含功能的實現;
++++2、C#接口成員的訪問級別是默認的(默認爲public),不可以使用其他修飾符修飾;
++++3、C#接口成員不能有static、abstract、override、virtual修飾;
++++4、接口一旦被實現,就必須實現接口當中的所有成員,除非實現類本身是抽象類;
++++5、接口無法直接進行實例化,因爲其成員必須通過由實現接口的任何類或結構來實現;
++++6、接口可以包含事件,索引器,方法和屬性,但是不能包含字段;
++++7、類的繼承只能單繼承,接口的實現支持多實現;
++接口的實現
++++立鑽哥哥:接口中方法的定義不允許加上訪問修飾符,默認修飾符爲public;
class Parrot : IFly, ISpeak{ public void MySpeak(){ Console.WriteLine(“鸚鵡會說話”); }
public void MyFly(){ Console.WriteLine(“鸚鵡會飛”); } } |
++++類實現接口就必須實現接口當中定義的所有方法,除非該類是抽象類;
++接口與抽象類
++++立鑽哥哥:接口和抽象類非常相似,它定義了一些未實現的屬性和方法;所有繼承接口的類都繼承這些成員,在這個角度上,可以把接口理解爲一個類的模板;
++++接口最終的目的是起到統一的作用;
++++相同點:
--1、兩者都不能被實例化;
--2、兩者都包含了由其他類或結構繼承或實現的抽象成員;
++++不同點:
--1、抽象類當中除了擁有抽象成員外還可以擁有非抽象成員;而接口中所有的成員都是抽象的;
--2、抽象類成員可以使用修飾符修飾;接口當中接口成員訪問級別是默認public;
--3、接口當中不可以包含構造方法,析構方法,靜態成員以及常量;
--4、C#類只支持單繼承;接口支持多繼承;
###1.11.2、泛型
###1.11.2、泛型 |
++1.11.2、泛型
++++立鑽哥哥:C#中的泛型能夠將類型作爲參數來傳遞,即在創建類型時用一個特定額符號如“T”來作爲一個佔位符,代替實際的類型,等待在實例化時再用一個實際的類型來代替;
public static void Swap<T>(ref T value1, ref T value2){ T temp = value1; value1 = value2; value2 = temp; } |
++泛型的優點
++++1、使用泛型可以重用代碼,保護類型的安全以及提高性能;
++++2、降低強制轉換或裝箱操作的成本和風險;
++++3、可以對泛型參數進行限定以訪問特定數據類型的方法;
++泛型類型參數常用的約束類型
++++立鑽哥哥:
類型 |
含義 |
where T : struct |
表示泛型T是值類型(小數、整數、char、bool、struct) |
where T : class |
表示泛型T是引用類型 |
where T : new() |
表示這個泛型具有一個無參數的構造方法,如果有多個約束,new()必須放在最後 |
where T : 基類名 |
表示這個泛型是該基類或者其派生類 |
where T : 接口名 |
表示泛型是實現了該接口的類型 |
##1.12、C#集合
##1.12、C#集合 |
++1.12、C#集合
++++1.12.1、數組的侷限性
++++1.12.2、集合的概念
++++1.12.3、常見的集合
++++1.12.4、集合的類成員與用法
###1.12.1、數組的侷限性
###1.12.1、數組的侷限性 |
++1.12.1、數組的侷限性
++++立鑽哥哥:數組只能存儲相同類型的數據;
++++數組不能動態的擴展長度(會出現數組越界);
int[] intArray = new int[3]; intArray[4] = 99; //數組越界 |
###1.12.2、集合的概念
###1.12.2、集合的概念 |
++1.12.2、集合的概念
++++立鑽哥哥:集合好比容器,將一系列相似的對象組合在一起,是一個特殊的類,和數組一樣,可以通過索引訪問集合成員,也可以通過“鍵”來訪問;
++++與傳統數組不同的是:集合的大小可以動態調整,可以在運行時添加或刪除元素;
++集合的類型
++++立鑽哥哥:集合分爲:泛型集合與非泛型集合;
++++[非泛型集合]:位於System.Collections命名空間;
++++[泛型集合]:位於System.Collections.Generic命名空間;
###1.12.3、常見的集合
###1.12.3、常見的集合 |
++1.12.3、常見的集合
++++立鑽哥哥:
++++[非泛型集合(System.Collections)]:ArrayList(動態數組);Stack(堆棧);Queue(隊列);Hash Table(哈希表);
++++[泛型集合(System.Collections.Generic)]:List<T>、Stack<T>、Queue<T>、Dictionary<TKey, Tvalue>;
###1.12.4、集合的類成員與用法
###1.12.4、集合的類成員與用法 |
++1.12.4、集合的類成員與用法
++++立鑽哥哥:ArrayList(動態數組);List<T>(泛型動態數組);Stack(堆棧);Queue(隊列);HashTable(哈希表);Dictionary<TKey, Tvalue>(字典);
++ArrayList(動態數組)
++++立鑽哥哥:不安全的集合類型;
++++其元素爲值類型時,效率不高(裝箱和拆箱耗性能);
++++常用方法:Add(); Insert(); Remove(); Reverse(); Contains(); Clear();
++List<T>(泛型動態數組)
++++立鑽哥哥:List類是ArrayList類的泛型等效類;(安全的集合類型)
++++與ArrayList不同的是,聲明集合時需要聲明集合內部的數據類型,即T的類型;
++++常用方法:Add(); Insert(); Remove(); Reverse(); Contains(); Clear(); IndexOf(T);
++Stack(堆棧)
++++立鑽哥哥:後進先出(LIFO)的一種數據結構,本質上堆棧也是一種線性結構;
++++不安全的數據結構,其泛型爲Stack<T>;
++++常用方法:Push(); Pop(); Peek(); Contains(); Clear(); Count;
++Queue(隊列)
++++立鑽哥哥:先進先出(FIFO)的一種數據結構;
++++不安全的數據結構,其泛型爲Queue<T>;
++++常用方法:Enqueue(); Dequeue(); Peek(); Contains(); Clear(); Count;
++HashTable(哈希表)
++++立鑽哥哥:處理和表現類似key-value的鍵值對的集合;
++++Key值必須唯一,區分大小寫;Value可以是變量,也可以是對象;
++++常用方法:Add(); Clear(); ContainsKey(); ContainsValue(); Remove(); Keys(); Values();
++Dictionary<TKey, Tvalue>(字典)
++++立鑽哥哥:同哈希表一樣,根據鍵進行的鍵值對的集合,不同的是對鍵值進行了類型限定;
++++常用方法:Add(); Clear(); ContainsKey(); ContainsValue(); Remove(); Keys(); Values();
##1.13、C#委託
##1.13、C#委託 |
++1.13、C#委託
++++1.13.1、什麼是委託?
++++1.13.2、委託的聲明&匿名函數
++++1.13.3、系統委託&Lambda表達式
++++1.13.4、事件的由來
++++1.13.5、事件和委託有什麼區別
###1.13.1、什麼是委託?
###1.13.1、什麼是委託? |
++1.13.1、什麼是委託?
++++立鑽哥哥:委託(delegate)是表示將 方法作爲參數傳遞 給其他方法;
++++委託(delegate)類似函數指針,委託是面向對象的,類型安全的;委託既能引用靜態方法,也能引用實例方法;
++++委託是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,可以避免在程序中大量使用“if-else(switch)”語句,同時使得程序具有更好的可擴展性;
###1.13.2、委託的聲明&匿名函數
###1.13.2、委託的聲明&匿名函數 |
++1.13.2、委託的聲明&匿名函數
++++立鑽哥哥:
class HelloWorld{ //聲明委託 public delegate void GreetingDelegate(string name); }
|
public void GreetingPeople(string name, GreetingDelegate method){ //委託的調用方法同方法調用一樣 method(name); } |
++匿名函數
++++立鑽哥哥:匿名函數的出現就是在初始化時內聯聲明的方法,使得委託的語法更簡潔;
MyClick click = delegate(){ Console.WriteLine(“立鑽哥哥:按鈕被點擊了”); }; click(); |
###1.13.3、系統委託&Lambda表達式
###1.13.3、系統委託&Lambda表達式 |
++1.13.3、系統委託&Lamaba表達式
++++立鑽哥哥:C#中內置了三種委託方式:Func委託;Action委託;Predicate委託;
++++[Func委託]:delegate TResult Func<TResult>;(Func委託必須帶有返回值)
++++[Action委託]:delegate void Action(); (Action委託沒有返回值)
++++[Predicate委託]:用的比較少;
++++提示:有返回值選擇Func委託;沒有返回值選擇Action委託;
++Lambda表達式
++++立鑽哥哥:Lambda表達式是一個匿名函數,是一種高效的類似於函數式編程的表達式;
++++Lambda運算符的左邊是輸入參數(如果有),右邊是表達式或語句塊;
delegate1 d1 = (x) => {}; delegate2 d2 = (x, y) => { return x + y; }; |
###1.13.4、事件的由來
###1.13.4、事件的由來 |
++1.13.4、事件的由來
++++立鑽哥哥:事件是說在發生其他類或對象關注的事情時,類或對象可通過事件通知它們;
++++事件的關鍵字是:event;
++++event封裝了委託類型的變量: 在類的內部,不管聲明是public還是protected,它總是private的;在類的外部,註冊”+=”和註銷“-=”;
++++聲明一個事件(event)類似於聲明一個進行了封裝的委託類型(delegate)的變量;
public delegate void CatShoutEventHandler(); public event CatShoutEventHandler CatShout; |
###1.13.5、事件和委託有什麼區別
###1.13.5、事件和委託有什麼區別 |
++1.13.5、事件和委託有什麼區別
++++立鑽哥哥:事件是一種特殊的委託的實例,或者說是受限制的委託,是委託的一種特殊應用;在類的外部只能施加+=,-=操作符;二者本質上是一個東西;
++++事件只允許用add(+=),remove(-=)方法來操作,這導致了它不允許在類的外部被直接觸發,只能在類的內部適合的時機觸發;委託可以在外部被觸發,但是別這麼用;
++++使用中,委託常用來表示回調,事件表達外發的接口;
++++事件不可以當作形參傳遞,但是委託可以;
##1.14、程序設計6大原則
##1.14、程序設計6大原則 |
++1.14、程序設計6大原則
++++立鑽哥哥:6大設計原則:單一職責原則、里氏替換原則、依賴倒置原則、接口隔離原則、迪米特法則、開放封閉原則;
++++Single Responsibility Principle: 單一職責原則;
++++Open Closed Principle: 開閉原則;
++++Liskov Substitution Principle: 里氏替換原則;
++++Law of Demeter: 迪米特法則;
++++Interface Segregation Principle: 接口隔離原則;
++++Dependence Inversion Principle: 依賴倒置原則;
====>S、O、L、L、I、D:SOLID(solid,穩定的):建立穩定、靈活、健壯的設計;
##1.15、23種設計模式
##1.15、23種設計模式 |
++1.15、23種設計模式
++++立鑽哥哥:23種設計模式:單例模式;工廠方法模式;抽象工廠模式;建造者模式;原型模式;適配器模式;裝飾模式;橋接模式;組合模式;享元模式;代理模式;外觀模式;觀察者模式;模板方法模式;命令模式;狀態模式;職責鏈模式;解釋器模式;中介者模式;訪問者模式;策略模式;備忘錄模式;迭代器模式;
++單例模式(Singleton)
++++立鑽哥哥:單例模式(Singleton)保證一個類僅有一個實例,並提供一個訪問它的全局訪問點;
class Singleton{ private static Singleton instance; private Singleton(){} //構造方法讓其private,防止外界利用new實例化
//此方法是獲得本類實例的唯一全局訪問點 public static Singleton GetInstance(){ if(null == instance){ instance = new Singleton(); //不存在,new實例化一個 }
return instance; } } |
@@提示:有些博客可能只是開了頭,如果感興趣的同學,可以“點贊”或“評論區留言”,只要關注的同學多了,那就會繼續完善喲!(“++==”,表示沒有寫完的,如果關注度不高就不完善了;“++ok++”,表示此篇博客已經完成,是階段性完整的!)
++++VR雲遊戲=Unity+SteamVR+雲技術+5G+AI;(說明:AI人工智能不是我們的主要研究技術,只是瞭解一下,領略一下有風的感覺!但是,VR是我們的研究重點)
++++【Unity開發基礎】分類:https://blog.csdn.net/vrunsoftyanlz/category_7309057.html
++++【Linux系統編程】分類:https://blog.csdn.net/vrunsoftyanlz/category_9694767.html
++++【C++C鑄就生存利器】分類:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分類:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立鑽哥哥CSDN空間】:https://blog.csdn.net/VRunSoftYanlz/
【XR遊戲開發QQ羣:784477094】
++立鑽哥哥推薦的拓展學習鏈接(Link_Url):
立鑽哥哥推薦的拓展學習鏈接(Link_Url) |
++++立鑽哥哥Unity 學習空間: http://blog.csdn.net/VRunSoftYanlz/
++++虛擬現實VR資訊: https://blog.csdn.net/VRunSoftYanlz/article/details/89165846
++++HTC_VIVE開發基礎:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus雜談:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安裝使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity減少VR暈眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR腳本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0開發指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0開發指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入門:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR2.2.0交互系統:https://blog.csdn.net/VRunSoftYanlz/article/details/89199778
++++SteamVR2.2.0傳送機制:https://blog.csdn.net/VRunSoftYanlz/article/details/89390866
++++SteamVR2.2.0教程(一):https://blog.csdn.net/VRunSoftYanlz/article/details/89324067
++++SteamVR2.2.0教程(二):https://blog.csdn.net/VRunSoftYanlz/article/details/89894097
++++SteamVR_Skeleton_Poser:https://blog.csdn.net/VRunSoftYanlz/article/details/89931725
++++SteamVR實戰之PMCore:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK雜談:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入門(雜談):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目錄):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代碼結構(目錄):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虛擬現實行業應用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平臺上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平臺熱銷VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR實驗:以太網幀的構成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++實驗四:存儲器擴展實驗:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用戶手冊:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面試題ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面試題D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面試題E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面試題F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面試題:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禪道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入門篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入門篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入門篇(基礎概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知識點:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++遊戲框架(UI框架夯實篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++遊戲框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架設計:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++從零開始學架構:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++設計模式簡單整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++專題:設計模式(精華篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小項目參考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小遊戲算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML類圖:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知識點0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知識點0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader編程(第一篇:快速入門篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader編程(第二篇:基礎夯實篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基礎:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向組件開發:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系統:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平臺開發:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基礎:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI進階:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI綜合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity動畫系統基礎:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity動畫系統進階:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation導航系統:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity數據存儲:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite數據庫:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW類和協程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity網絡:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity資源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++編寫Photon遊戲服務器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委託:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#靜態類:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String類:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#數據類型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默認的快捷鍵:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++遊戲相關縮寫:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody剛體:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材質:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform變換:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider輪碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources資源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON數據結構:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入門:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企業內訓(目錄):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企業內訓(第1講):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企業內訓(第2講):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企業內訓(第3講):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企業內訓(第4講):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企業內訓(第5講):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企業內訓(第6講):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++鑽哥帶您瞭解產品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件<Obi Rope>:https://blog.csdn.net/VRunSoftYanlz/article/details/83963905
++++計算機組成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:雲計算和霧計算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++雲計算通俗講義:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立鑽哥哥Unity 學習空間: http://blog.csdn.net/VRunSoftYanlz
--_--VRunSoft:lovezuanzuan--_--