iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
自我挑戰組

C# 與 .Net Core 雜記系列 第 4

C# 一些基礎特性

  • 分享至 

  • xImage
  •  

C# 類別

class 定義的類型是參考型別, 在運行時當你聲明一個參考類別變數, 此變數會包含 null, 直到使用 new 運算符建立這個類的實例, 或者將一個兼容類型的物件指向此變數, 建立物件時, 會在受管理的 heap 為該物件分配足夠的記憶體, 而該變數只保存對這個物件位置的參考, 在受管理 heap 的類型配置時和被 CLR 的自動記憶體管理(也稱垃圾回收 garbage collection)功能都需要開銷, 然而記憶體管理也以獲得高度最佳化, 在大部分情況下並不會產生效能問題.
使用關鍵字 class 宣告類別, 後面接著唯一識別碼

// [access modifier] - [class] - [identifier]
// access modifier 代表存取層級
public class User
{
  // 
}

建立物件
使用關鍵字 new 來建立物件

User person1 = new User();
// person 是基於 User 的物件的參考

類別繼承
類別完全支持繼承, 這是物件導向程式設計的基礎特性, 當你建造一個類別時, 你可以從其他非定義為 sealed 的類別繼承, 還可重寫類別的方法, 另外可以實作一個或多個介面, 繼承通過使用衍生完成, 這意味著一個類是通過使用他繼承的資料和行為的基類來宣告, 通過附加冒號指定基類, 類別宣告基類時, 會繼承基類的除了建構式(constructor)外所有成員, C# 中的類別只能直接繼承自一個基類, 類別可實作一個或多個介面

public class Student : Person
{
}

抽象類別(abstract class)
可以宣告 抽象類別(abstract class), 一個抽象類別包含抽象方法有簽章沒有實作, 抽象類別無法實例化, 只能通過衍生類別來時作抽象方法
(密封類別)Sealed Class
在類別定義前面加上 sealed 關鍵字, 就可以將類別宣告為 sealed, 密封類別不能當基類被繼承, 所以也不能是抽象類別.

參數(Parameters)

parameters 用於將值或變數參考傳遞給方法, 當方法被調用時從指定的引數(argument)得到參數的實際值,參數有4種: 實值參數(value parameters), 參考參數(reference parameter), 輸出參數(output parameter), 參數陣列(parameter array)
一個實值參數被用來傳遞輸入引數, 一個實值參數會對應至一個區域變數(local variable), 這個變數會從傳遞的引數取得初始值, 對參數修改不影響傳入的引數
參考參數用參考方式傳遞引數, 傳遞給參考參數的引數必須有明確值的變數, 方法執行期間參考參數與引數變數相同儲存位置, 使用 ref 修飾符來宣告參考參數

void swap(ref int x, ref int y)
{
  int temp = x;
  x = y;
  y = temp;
}

int i = 1, j = 2;
swap(ref i, ref j);
Console.WriteLine($"{i} {j}")

輸出參數用參考方式傳遞引數, 類似參考參數, 不過不需要明確指定值給呼叫端的引數, 使用 out 修飾符宣告輸出輸出參數

class Program
{
  static void Add(int x, int y, out int sum)
  {
    sum = x + y;
  }
  
  static void Main(string[] args)
  {
    Add(5, 6, out int res);
    Console.WriteLine($"{res}");
  }
}

參數陣列允許將數量不固定的引數傳遞給方法, 使用 params 修飾符來宣告, 方法中只有最後一個參數可以是參數陣列, 陣列參數的型別必須是一維陣列型別, 例如 System.Console 的 Write 和 WriteLine 方法, 可以傳遞陣列類型的單一引數, 或任何個數的參數陣列的元素

int x, y, z;
x = 1;
y = 2;
z = 3;
Console.Write("x={0} y={1} z={2}", x, y, z);
object[] args = new object[3];
args[0] = x;
args[1] = y;
args[2] = z;
Console.Write("x={0} y={1} z={2}", args);

上一篇
初次遇見 .NET
下一篇
C# 一些特性
系列文
C# 與 .Net Core 雜記14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言