C#語言
- 數據類型
列舉:
分類一
- 簡單數據類型:byte(無符號8位整型)、short(16)、int(32)、long(64)、float(32)、double(64)、char(16)、bool
- 組合數據類型:struct(結構體),enum(枚舉類型),class。
分類二:(作爲參數傳遞時,傳遞拷貝,還是傳遞地址) - 值類型:簡單數據類型,struct類型,enum類型
- 引用類型:class類型,數組(數組名)(包括字符串)。
注意:
只有引用型的變量的變量可以賦值爲null,值類型不可以,null是引用類型的默認值
對於C#語言中的string類型,其實是引用傳遞,但是作爲函數的參數使用時,相當於是值傳遞。若在函數中進行更改的話實際上是生成了另一個字符串。
string a = "aaa"; //==> a----->new String("aaa")
string b = a; //==> b----->a, 傳引用
b = "bbb"; //==> b----->new String("bbb"), 傳引用,b指向了一個新的字符串,a並沒有變。
如果確實要傳地址,那就要加ref或out關鍵字,ref與out的區別在於被傳遞的變量是否存在物理地址,簡單理解是否需要初始化
如果是引用類型,那麼聲明一個實例應該是
string s=new string();
然後再給s賦值,而實際上並不需要這麼做。
參考:https://blog.csdn.net/lishimin1012/article/details/8687539
2. 常量
常量是固定值,程序執行期間不會改變。常量可以是任何基本數據類型,比如整數常量、浮點常量、字符常量或者字符串常量,還有枚舉常量,常量可以被當作常規的變量,只是它們的值在定義後不能被修改。
常量的定義:
const 數據類型 變量名=常量值
==readonly ==
const 在聲明的時候就要初始化。不用實例化,直接加點就可以使用
readonly 既可以在聲明中也可以在構造函數中初始化。必須要實例化之後纔可以使用,實例化後的類名加點使用。
(1)常量聲明之後不允許進行改變其值
(2)常量命名全部使用大寫字母/帕斯卡命名
3. 關於static
https://www.cnblogs.com/whzhouqun/p/4669837.html
在C#main函數裏調用的其他函數,必須都是靜態的,因爲main函數就是靜態的。
4. 運算符與表達式與C++相同。
5. 典型的語句
switch語句語法結構:
foreach 語句
foreach(元素類型 元素 in 元素集合)
{
語句序列//通常用於遍歷每個元素。
}
foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
if (String.IsNullOrEmpty(control.Text.Trim()))
{
MessageBox.Show("請補全學生信息!", "系統提示", MessageBoxButtons.OK);
return;
}
}
}
try……catch……finally語句
try
{
語句序列;
}
catch(Exception)
{
語句序列;
}
finally
{
語句序列;//不管有沒有發生異常,都會執行。
}
Console.WriteLine("請輸入一個整數!");
string temp = Console.ReadLine();
try
{
int i = int.Parse(temp);//強制轉換
for (int j = 0; j < i; j++)
{
Console.WriteLine("*");
}
}
catch (Exception e)
{
Console.WriteLine("錯誤原因爲:" + e.Message);
}
finally
{
Console.WriteLine("結束!");
}
break、continue語句
break語句:跳出最近的一層循環或者switch語句
continue語句:將控制權傳遞給所在封閉循環的下一次迭代(會執行i++)。
單行註釋://;
多行註釋:/*,*/
面向對象技術
對象,類,封裝,繼承,多態,屬性,索引器,泛型,接口。
對象
通過類聲明的變量,實例化的例子稱之爲一個對象。
對於非靜態類,實例化是爲對象分配存儲空間的過程。Class 子類名=new Class()
封裝
定義:把類的內部隱藏起來,防止外部看到內部的實現過程。
方法:限制修飾符(private,protected,public,internal)
對類中的數據和操作的限制修飾符
- private:只允許類的內部訪問
- protected:只允許類的內部和子類訪問
- public:類的內部和外部都能訪問
- internal:在同一程序集內可以訪問,相當於public。internal關鍵字總結
對類的限制修飾符 - public:都可以使用
- internal:在同一程序集下可以使用。
在類圖中,-:private,+:public,#:protected。
繼承
- 定義:子類擁有父類的某些數據和操作的過程。
- 方法:
public class Child(子類名) : Parent(父類名) {……}
:表示繼承。 - C#只支持單繼承。
- 利用sealed關鍵字可以防止所聲明的類被繼承。public sealed class Name
- 對於父類中的某些數據和操作:
表格語句的上一行必須是空行,否則表格不生效
在父類中 | public | protected | private | internal |
---|---|---|---|---|
在子類中 | public | protected | 無法繼承 | internal |
- 子類訪問父類的成員
利用base關鍵字。
- 通過類圖顯示
用指向父類的箭頭。 - 實例化問題
子類可以實例化父類,但是父類不能實例化子類。所以對象的類型一定是子類,當子類實例化父類時,若子類和父類有重名方法,執行執行的是父類中的方法,若要執行子類的方法,必須要把這個對象強制轉換爲子類類型。轉換方法:
多態
- 定義:相同的操作,對於不同的對象,可以有不同的解釋,產生不同的執行效果。
- 分類:
- 運行時多態:在運行時決定執行哪個類的哪個方法(override複寫)
- 編譯時多態:在編譯時決定執行類中的哪個方法(overload重載)
- 實現:
運行時多態:
(1)在父類中定義並實現虛方法(virtual關鍵字)
(2)在子類中覆寫(override)該虛方法
(3)虛方法必須有方法體
(4)覆寫虛方法,要求方法名,形參,返回值類型必須相同
編譯,生成,調試,運行的概念
編譯時多態(在編譯時根據參數列表決定執行哪個方法):
- 操作符的重載:operator關鍵字 public static 返回值類型 operator 運算符(形參列表){}
- 方法的重載(常用於構造函數):必須有相同的方法名,不同的參數列表,可以有相同的返回值類型。
- 抽象類和抽象方法
抽象方法:可以看作是沒有實現體的虛方法(abstract),即只有方法的聲明,需要在子類中覆寫(override)該方法。必須覆寫
抽象類:含有抽象方法的類。抽象類不可以直接實例化對象
public abstract class Animal
{
public int Age;
public double Wetght;
public abstract void Eat();
public abstract void Sleep();
}
public class Bird : Animal
{
public override void Eat()
{
Console.WriteLine("Bird Eat!");
}
public override void Sleep()
{
Console.WriteLine("Bird Sleep!");
}
public void Fly()
{
Console.WriteLine("Bird Fly!");
}
}
public class Dog : Animal
{
public override void Eat()
{
Console.WriteLine("Dog Eat!");
}
public override void Sleep()
{
Console.WriteLine("Dog Sleep!");
}
public void Run()
{
Console.WriteLine("Dog Run!");
}
}
public class Fish : Animal
{
public override void Eat()
{
Console.WriteLine("Fish Eat!");
}
public override void Sleep()
{
Console.WriteLine("Fish Sleep!");
}
public void Swim()
{
Console.WriteLine("Fish Swim!");
}
}
public class Raiser
{
public void Raise(Animal al)
{
al.Eat();
al.Sleep();
}
}
class Program
{
static void Main(string[] args)
{
Raiser rsr = new Raiser();
rsr.Raise(new Dog());
rsr.Raise(new Bird());
rsr.Raise(new Fish());
}
}
屬性
C#在聲明data時就可以定義set、get方法
- get:定義讀取操作
- set:定義賦值操作,value表示傳入的值。
索引器
定義:是集合類中的一種特殊屬性,可使得集合類中的元素像數組元素一樣訪問。
接口
- 定義:
- 接口是類設計的藍圖,只提供聲明而沒有實現。
- 接口不可以直接實例化對象。
- C#允許一個類實現多個接口(C#只允許單繼承)
- 接口就是包含一系列不被實現的方法,而把這些方法的實現交給繼承它的類。
- 表示:
Interface表示接口,一般接口以大寫字母I開頭。
- 接口與抽象類(作用效果上常常可以相互代替)
相同點:接口和抽象類都不可以直接實例化對象。
不同點:
- 抽象類中的數據和操作(方法)必須有限制修飾符,而接口中的數據和操作不可以有限制修飾符
- 抽象類中可以有帶實現體的方法(非abstract方法),而接口只能有方法的聲明。
- 抽象類在子類中通過override關鍵字覆寫抽象方法,而接口被子類直接實現。
方法一:
public interface IHighWayWorker
{
void Build();
void HighWayOperation();
}
public interface IRailWayWorker
{
void Build();
void RailWayOperation();
}
public class Worker : IHighWayWorker, IRailWayWorker
{
public void Build()
{
Console.WriteLine("HighWay,RailWay Build!");
}
public void HighWayOperation()
{
Console.WriteLine("HighWayOperation");
}
public void RailWayOperation()
{
Console.WriteLine("RailWayOperation");
}
}
static void Main(string[] args)
{
Worker wr = new Worker();
wr.Build();
IRailWayWorker rwr = new Worker();
rwr.Build();
rwr.RailWayOperation();
IHighWayWorker hwr = new Worker();
hwr.Build();
hwr.HighWayOperation();
}
HighWay,RailWay Build!
HighWay,RailWay Build!
RailWayOperation
HighWay,RailWay Build!
HighWayOperation
方法二:
public class Worker : IHighWayWorker, IRailWayWorker
{
void IHighWayWorker.Build()//此時不能加限制修飾符
{
Console.WriteLine("HighWay Build!");
}
void IRailWayWorker.Build()//此時不能加限制修飾符
{
Console.WriteLine("RailWay Build!");
}
public void HighWayOperation()
{
Console.WriteLine("HighWayOperation");
}
public void RailWayOperation()
{
Console.WriteLine("RailWayOperation");
}
}
泛型
在使用Object類(可包含任意數據類型)來代替一個具體的數據類型(int,string等)時,有可能因爲用戶的輸入不當發生類型安全問題,對於這類類型安全問題,編譯時可以通過,但是運行時就會發生問題。
定義:參數化類型。在編譯時用一個具體的類型代替該參數類型,可定義類型安全的類而不影響工作效率。
注意:在使用泛型T時,要注意接口IComparable<T>的實現。
例如:
public interface IQueque<T>where T:IComparable<T>
{
int Length { get; }//不寫限制修飾符
T QuequeFront { get; }
void Clear();
void DeQueque();
void EnQueque(T data);
bool IsEmpty();
}
類與類之間的關係
- 依賴關係:類中方法的實現需要以另一個類作爲參數。
表示:在類圖中用虛線表示。 - 繼承關係
表示:空心三角形加實線表示。 - 關聯關係:一個類以另一個類作爲數據(Data)
表示:用實線箭頭表示。 - 實現關係:接口的實現
表示:空心三角形+虛線。