vocus logo

方格子 vocus

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
對於害怕風險、擔心賠錢的投資新手,本文介紹債券投資的優勢,說明其風險相對可控、能定期領息的特性,並介紹玉山「小額債」如何以低門檻(1,000美元/澳幣起)提供投資者參與海外債市的機會,強調其低波動、固定收益的友善特點,適合有明確時間目標的資金規劃。
Thumbnail
對於害怕風險、擔心賠錢的投資新手,本文介紹債券投資的優勢,說明其風險相對可控、能定期領息的特性,並介紹玉山「小額債」如何以低門檻(1,000美元/澳幣起)提供投資者參與海外債市的機會,強調其低波動、固定收益的友善特點,適合有明確時間目標的資金規劃。
Thumbnail
本文深入探討債券投資的本質、常見迷思、風險控制方法,並詳細介紹玉山證券「小額債」平臺的特色與優勢,包括低門檻、24hr即時報價、精準篩選等,幫助投資人建立理性、有紀律的債券投資策略,打造穩定的現金流,讓金錢成為財務上的助力。
Thumbnail
本文深入探討債券投資的本質、常見迷思、風險控制方法,並詳細介紹玉山證券「小額債」平臺的特色與優勢,包括低門檻、24hr即時報價、精準篩選等,幫助投資人建立理性、有紀律的債券投資策略,打造穩定的現金流,讓金錢成為財務上的助力。
Thumbnail
自由工作者收入不穩定,適合選擇穩健的小額債做資產配置。玉山證券小額債最低一千美金就能開始,支援 24 小時委託下單與即時報價,並提供多條件篩選找到適合的債券。本文分享我的操作體驗與為何小額債能成為自由工作者的安心配置。
Thumbnail
自由工作者收入不穩定,適合選擇穩健的小額債做資產配置。玉山證券小額債最低一千美金就能開始,支援 24 小時委託下單與即時報價,並提供多條件篩選找到適合的債券。本文分享我的操作體驗與為何小額債能成為自由工作者的安心配置。
Thumbnail
為什麼「小額債券」會成為越來越多人關注的選項? 如果你跟我一樣,經歷過股市大漲的甜、也嚐過劇烈修正的苦, 大概就會慢慢明白一件事—— 投資,不只是追求報酬,更是關於「穩定感」。 很多投資新手一開始進市場,很容易把全部資金都丟進股票, 漲的時候很快樂,跌的時候卻發現自己根本睡不好。 這
Thumbnail
為什麼「小額債券」會成為越來越多人關注的選項? 如果你跟我一樣,經歷過股市大漲的甜、也嚐過劇烈修正的苦, 大概就會慢慢明白一件事—— 投資,不只是追求報酬,更是關於「穩定感」。 很多投資新手一開始進市場,很容易把全部資金都丟進股票, 漲的時候很快樂,跌的時候卻發現自己根本睡不好。 這
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
本章節的目的是介紹 Kotlin 中的物件導向概念。這包括了類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型以及反射等概念。每一個概念都會透過範例程式碼來解釋其功能和用法。
Thumbnail
本章節的目的是介紹 Kotlin 中的物件導向概念。這包括了類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型以及反射等概念。每一個概念都會透過範例程式碼來解釋其功能和用法。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News