C#入門-Day8:物件導向

更新 發佈閱讀 16 分鐘

類別(Class)

類別是 C# 中的基本構造,用於封裝數據和行為。類別是對象的藍圖,可以包含字段、屬性、方法和事件。

using System;

public class Person
{
// 字段
private string name;
private int age;

// 屬性
public string Name
{
get { return name; }
set { name = value; }
}

public int Age
{
get { return age; }
set { age = value; }
}

// 方法
public void Greet()
{
Console.WriteLine($"Hello, my name is {name} and I am {age} years old.");
}
}

public class Program
{
public static void Main(string[] args)
{
Person person = new Person();
person.Name = "Alice";
person.Age = 30;
person.Greet(); // Output: Hello, my name is Alice and I am 30 years old.
}
}

繼承(Inheritance)

繼承允許類別從另一個類別派生,繼承其字段和方法。C# 支持單繼承,但可以實現多個介面。

using System;

public class Animal
{
public void Eat()
{
Console.WriteLine("Eating...");
}
}

public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Barking...");
}
}

public class Program
{
public static void Main(string[] args)
{
Dog dog = new Dog();
dog.Eat(); // Output: Eating...
dog.Bark(); // Output: Barking...
}
}

多型(Polymorphism)

多型允許對象通過父類或介面類型來呼叫方法,行為由實際對象決定。這通常通過方法重寫(override)實現。

using System;

public class Animal
{
public virtual void Speak()
{
Console.WriteLine("Animal sound");
}
}

public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Bark");
}
}

public class Program
{
public static void Main(string[] args)
{
Animal animal = new Dog();
animal.Speak(); // Output: Bark
}
}

封裝(Encapsulation)

封裝是將數據和方法封裝在類別內部,通過屬性和方法來控制對它們的訪問。

using System;

public class Account
{
private double balance;

public double Balance
{
get { return balance; }
private set { balance = value; }
}

public void Deposit(double amount)
{
if (amount > 0)
{
Balance += amount;
}
}

public void Withdraw(double amount)
{
if (amount > 0 && amount <= Balance)
{
Balance -= amount;
}
}
}

public class Program
{
public static void Main(string[] args)
{
Account account = new Account();
account.Deposit(100);
account.Withdraw(30);
Console.WriteLine(account.Balance); // Output: 70
}
}

介面(Interface)

介面定義了成員的簽名,不包含實現。類別可以實現介面,提供這些成員的具體實現。

using System;

public interface IAnimal
{
void Speak();
}

public class Dog : IAnimal
{
public void Speak()
{
Console.WriteLine("Bark");
}
}

public class Program
{
public static void Main(string[] args)
{
IAnimal animal = new Dog();
animal.Speak(); // Output: Bark
}
}

抽象類別(Abstract Class)

抽象類別不能實例化,可以包含抽象方法(無實現)和具體方法(有實現)。子類必須實現所有抽象方法。

using System;

public abstract class Animal
{
public abstract void Speak();
public void Eat()
{
Console.WriteLine("Eating...");
}
}

public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Bark");
}
}

public class Program
{
public static void Main(string[] args)
{
Dog dog = new Dog();
dog.Speak(); // Output: Bark
dog.Eat(); // Output: Eating...
}
}

靜態類別(Static Class)

靜態類別不能實例化,所有成員都必須是靜態的,常用於工具類或擴展方法。

using System;

public static class MathHelper
{
public static int Add(int a, int b)
{
return a + b;
}
}

public class Program
{
public static void Main(string[] args)
{
int result = MathHelper.Add(3, 4);
Console.WriteLine(result); // Output: 7
}
}

列舉(Enumerations)

列舉是一種特殊的數據類型,包含一組命名常數。

using System;

public enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}

public class Program
{
public static void Main(string[] args)
{
DaysOfWeek today = DaysOfWeek.Monday;
Console.WriteLine(today); // Output: Monday
}
}

委派(Delegates)

委派是一種類型安全的函數指標,允許方法作為參數傳遞。

using System;

public class Program
{
public delegate void PrintDelegate(string message);

public static void PrintMessage(string message)
{
Console.WriteLine(message);
}

public static void Main(string[] args)
{
PrintDelegate del = PrintMessage;
del("Hello, delegate!"); // Output: Hello, delegate!
}
}

Lambda 表達式

Lambda 表達式是匿名函數,用於簡潔地表示委派或表達式樹。

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
public static void Main(string[] args)
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);

foreach (var num in evenNumbers)
{
Console.WriteLine(num); // Output: 2 4
}
}
}

泛型(Generics)

泛型允許類別、介面和方法在聲明時不指定特定的數據類型,增加了代碼的重用性和類型安全性。

using System;

public class GenericList<T>
{
private T[] elements;
private int count;

public GenericList(int size)
{
elements = new T[size];
count = 0;
}

public void Add(T element)
{
if (count < elements.Length)
{
elements[count++] = element;
}
}

public T GetElement(int index)
{
if (index < count)
{
return elements[index];
}
throw new IndexOutOfRangeException();
}
}

public class Program
{
public static void Main(string[] args)
{
GenericList<int> intList = new GenericList<int>(5);
intList.Add(1);
intList.Add(2);
Console.WriteLine(intList.GetElement(1)); // Output: 2
}
}

反射(Reflection)

反射允許在運行時檢查和操作類型的元數據。

using System;
using System.Reflection;

public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void Greet()
{
Console.WriteLine($"Hello, my name is {Name} and I am {Age} years old.");
}
}

public class Program
{
public static void Main(string[] args)
{
Type type = typeof(Person);
Console.WriteLine($"Class: {type.Name}");

PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo property in properties)
{
Console.WriteLine($"Property: {property.Name}");
}

MethodInfo method = type.GetMethod("Greet");
Console.WriteLine($"Method: {method.Name}");

object person = Activator.CreateInstance(type);
type.GetProperty("Name").SetValue(person, "Alice");
type.GetProperty("Age").SetValue(person, 30);
method.Invoke(person, null); // Output: Hello, my name is Alice and I am 30 years old.
}
}

留言
avatar-img
Michael楊
33會員
138內容數
日後將分享關於我的經驗(日常、工作、技術),並期待未來能創造屬於我的宇宙。
Michael楊的其他內容
2024/05/25
本章講述了C#開發中的程序集,命名空間和 NuGet 包管理器。程序集是 .NET 應用的基礎,命名空間用於組織和預防命名衝突,而 NuGet 用於管理 .NET 的外部庫和依賴項。
Thumbnail
2024/05/25
本章講述了C#開發中的程序集,命名空間和 NuGet 包管理器。程序集是 .NET 應用的基礎,命名空間用於組織和預防命名衝突,而 NuGet 用於管理 .NET 的外部庫和依賴項。
Thumbnail
2024/05/25
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
Thumbnail
2024/05/25
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
Thumbnail
2024/05/25
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
2024/05/25
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
看更多
你可能也想看
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本章節的目的是介紹 Kotlin 中的物件導向概念。這包括了類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型以及反射等概念。每一個概念都會透過範例程式碼來解釋其功能和用法。
Thumbnail
本章節的目的是介紹 Kotlin 中的物件導向概念。這包括了類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型以及反射等概念。每一個概念都會透過範例程式碼來解釋其功能和用法。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News