1. 程式人生 > >【SIKIA計劃】_03_C#初級教程 (2015版)筆記

【SIKIA計劃】_03_C#初級教程 (2015版)筆記

Win32 API是微軟的作業系統Windows提供給開發人員的程式設計介面,它決定了我們開發的Windows應用程式的能力。MFC是微軟為開發人員提供的類庫,在某種意義上是對Win32 API的封裝。

MFC有一種被稱為MFC擴充套件DLL的共享機制。但是你只能在MFC應用程式中使用它們。

COM提供了一種在不同的應用程式和語言之間共享二進位制程式碼的規範。

 

C#是一種在.net環境下執行的語言之一。但是.net不只可以用於c#程式的執行,也可以用於其他程式的執行。.net是一個程式執行的環境。

 

.NET框架

編譯工具

   

產生↓

   

被編譯的程式碼

使用→

基類庫(BCL)

被執行↓

 

被執行↓

公共語言執行庫(CLR)

 

FCL框架類庫劃分成以下幾層。

最內一層,由BCL的大部分組成,主要作用是對.NET框架、.NET執行時及CIL語言本身進行支援,例如基元型別、集合型別、執行緒處理、應用程式域、執行時、安全性、互操作等。

中間一層,包含了對作業系統功能的封裝,例如檔案系統、網路連線、圖形影象、XML操作等。

最外一層,包含各種型別的應用程式,例如Windows Forms、Asp.NET、WPF、WCF、WF等。

 

編譯過程

.NET相容語言的原始碼檔案

.NET相容編譯器

程式集(公共中間語言CIL)(型別資訊)(安全資訊)

 

 

託管程式碼是.Net框架編寫的程式碼,需要在CLR的環境下執行

非託管程式碼不在CLR控制之下,比如Win32 C/C++ DLL 成為非託管程式碼

 

//名稱空間用到為白色,沒用到為灰色

//引用名稱空間

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

//定義名稱空間從{開始,到}結束

namespace _001_Learn_Csharp

{

//定義類

class Program

{

//定義一個Main方法

static void Main(string[] args)

{

//方法體

Console.WriteLine("Hello world");

}

}

}

//ctrl+f5 執行完暫停,不會馬上結束

 

型別庫:名稱空間(System)---class(Console)---WriteLine()

程式: 名稱空間(_001_Learn_Csharp)---class(Program)---Main()

 

C#命名規則:變數使用駝峰命名,方法和類為每個單詞大寫

 

識別符號

數字不能放在首位

@字元只能放在標示符的首位

 

System.Console.Write("Hello world1");

System.Console.WriteLine("Hello world2");

System.Console.WriteLine("兩個數相加為{0}+{1}={2}",3,34,37);

 

0x 或 0X 表示十六進位制,0 表示八進位制,沒有字首則表示十進位制。

 

用Unicode來表示一個轉義字元(\u加上十六進位制值) \u0027 為‘

 

使用@不識別轉義字元(除了雙引號其他轉義字元都不在識別)

使用@可以多行輸出

使用@表示路徑(string path = "c:\\xxx\\xx\\xxx.doc"; string path [email protected]"c:\xxx\xx\xxx.doc";)

 

註釋(ctrl+k ctrl+c) 取消註釋(ctrl+k ctrl+u)

 

int hp,mp=90,exp=50;

第一次給變數賦值叫做初始化

 

浮點數在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學記數法。

 

001

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace test_001

{

class Program{

static void Main(string[] args)

{

string name = "cai";

int hp = 100;

int level = 34;

float exp = 345.3f;

Console.WriteLine("主角的名字是:{0}\n血量:{1}\n等級:{2}\n經驗值:{3}", name, hp, level, exp);

string str1 = "I'm a good man.You are bad gril!";

Console.WriteLine(str1);

string str2 = @"I'm a good man.\n You are bad gril!";

Console.WriteLine(str2);

Console.ReadKey();

 

}

}

}

 

02

string str1 = Console.ReadLine();

int num1 = Convert.ToInt32(str1);

string str2 = Console.ReadLine();

int num2 = Convert.ToInt32(str2);

int temp = num1;

num1 = num2;

num2 = num1;

Console.WriteLine(num1+":"+num2);

Console.ReadKey();

 

型別之間的轉換

string locstr = 123.ToString();//如果要將"locstr"轉成整型數int i =Convert.ToInt16(locstr);

//方法一: 用 Convert int ii = int.Parse(locstr)

//方法二: 用 Parse

 

double dnum = 100.1;int ifromd = (int)dnum; //double型別顯式轉換轉為int型別Class1 c11 = new Class1();Class2 c22 = c11as Class2; //使用as進行顯式轉換

 

 

goto

int myInteger = 5;

goto mylabel;//goto語句用來控制程式跳轉到某個標籤的位置

myInteger++;

Console.WriteLine(myInteger);

Console.ReadKey();

 

迴圈的中斷 break(終止當前迴圈)

迴圈的中斷 continue(終止當前迴圈繼續下一個迴圈)

迴圈的中斷 return 跳出迴圈(跳出函式)

 

 

 

列舉

列舉型別的定義

enum <typeName>{

  <value1>,

  <value2>,

  <value3>,

  ...

  <valueN>

}

列舉型別的宣告 <typeName> <varName>;

列舉型別的賦值<varName>=<typeName>.<value>;

 

enum GameState{

  Pause,

  Failed,

  Success,

  Start

}

在遊戲中定義一個 GameState state = GameState.Start;

class Program{

static void Main(stirng)

}

 

結構體

如果我們要表示一個向量的話 需要定義,三個float型別 x y z

這樣比較麻煩,不方便管理,我們可以使用結構

定義結構

struct <typeName>{

  <memberDeclarations>

}

其中<memberDeclarations>是結構體的成員,每個成員的宣告如下

<type> <name>;

struct Vector3{

  float x;

  float y;

  float z;

}

 

——類是引用型別,結構是值型別。

——結構不支援繼承。

——結構不能宣告預設的建構函式。

 

陣列

陣列是一個儲存相同型別元素的固定大小的順序集合。陣列是用來儲存資料的集合,通常認為陣列是一個同一型別變數的集合。

int[] scores;

第一種方式

scores ={34,34,3,43,43,4,34};

第二種方式

scores = new int[10]; 裡面的每一個元素按照型別的預設值賦值

第三種方式

scores = new int[10]{123,12,34,56,77,89,85,6,45634,34};

陣列的訪問

<arrayName>[條目索引]

 

int [] shuzhu = new shuzhu[5] { 99, 98, 92, 97, 95}

foreach(int j in shuzhu ) { int i = j-100; Console.WriteLine("Element[{0}] = {1}", i, j); } Console.ReadKey();

 

多維陣列

string [,] names;

 

交叉陣列

int[][] scores = new int[2][]{new int[]{92,93,94},new int[]{85,66,87,88}};

 

引數陣列 params

public 返回型別 方法名稱( params 型別名稱[] 陣列名稱 )

 

字串

ToLower() 轉化小寫

ToUpper() 轉化大寫

Trim()去掉字串前面或者後面空格

TrimStart()

TrimEnd()

Split('.') 把字串按照指定的字元進行拆分,得到陣列

 

委託

using System;

using System.IO;

namespace DelegateAppl{

class PrintString {

static FileStream fs;

static StreamWriter sw; // 委託宣告  

public delegate void printString(string s); // 該方法列印到控制檯  

public static void WriteToScreen(string str) {

Console.WriteLine("The String is: {0}", str);  

} // 該方法列印到檔案  

public static void WriteToFile(string s) {

fs = new FileStream("c:\\message.txt", FileMode.Append, FileAccess.Write);

sw = new StreamWriter(fs);

sw.WriteLine(s);

sw.Flush();

sw.Close();

fs.Close();

} // 該方法把委託作為引數,並使用它呼叫方法  

public static void sendString(printString ps)  

{

ps("Hello World");  

}  

static void Main(string[] args) {

printString ps1 = new printString(WriteToScreen);

printString ps2 = new printString(WriteToFile);

sendString(ps1);

sendString(ps2);

Console.ReadKey();

}

}

}