C#語言入門-task3 :C# 語言的面向對象技術

C# 面向對象編程技術概述

C# 是一種現代化的面向對象編程語言,提供了豐富的特性來支持面向對象的編程范式。以下是 C# 中面向對象編程的核心概念和技術:

核心概念

1. 類與對象

類是對象的藍圖,定義了對象的屬性和行為。對象是類的實例。

// 定義一個類
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 {if (value >= 0)age = value;elsethrow new ArgumentException("年齡不能為負數");}}// 構造函數public Person(string name, int age){Name = name;Age = age;}// 方法public void SayHello(){Console.WriteLine($"你好,我是{Name},今年{Age}歲。");}
}// 創建對象并使用
Person person = new Person("張三", 30);
person.SayHello(); // 輸出: 你好,我是張三,今年30歲。
2. 繼承

繼承允許創建一個新類(子類)來繼承現有類(父類)的屬性和方法。

// 父類
public class Animal
{public string Name { get; set; }public Animal(string name){Name = name;}public void Eat(){Console.WriteLine($"{Name}正在吃東西。");}
}// 子類
public class Dog : Animal
{public Dog(string name) : base(name) { }// 新增方法public void Bark(){Console.WriteLine($"{Name}正在叫。");}
}// 使用繼承
Dog dog = new Dog("旺財");
dog.Eat();  // 輸出: 旺財正在吃東西。
dog.Bark(); // 輸出: 旺財正在叫。
3. 多態

多態允許通過父類類型引用子類對象,并在運行時決定調用哪個方法。

// 基類
public abstract class Shape
{public abstract double Area(); // 抽象方法
}// 子類
public class Circle : Shape
{public double Radius { get; set; }public Circle(double radius){Radius = radius;}public override double Area(){return Math.PI * Radius * Radius;}
}public class Rectangle : Shape
{public double Width { get; set; }public double Height { get; set; }public Rectangle(double width, double height){Width = width;Height = height;}public override double Area(){return Width * Height;}
}// 使用多態
Shape circle = new Circle(5);
Shape rectangle = new Rectangle(4, 6);Console.WriteLine($"圓的面積: {circle.Area()}");    // 輸出: 圓的面積: 78.5398163397448
Console.WriteLine($"矩形的面積: {rectangle.Area()}"); // 輸出: 矩形的面積: 24
4. 封裝

封裝通過訪問修飾符(如 public, private, protected)控制類成員的訪問級別。

public class BankAccount
{private double balance; // 私有字段,外部無法直接訪問public void Deposit(double amount){if (amount > 0)balance += amount;}public bool Withdraw(double amount){if (amount > 0 && balance >= amount){balance -= amount;return true;}return false;}public double GetBalance(){return balance;}
}// 使用封裝
BankAccount account = new BankAccount();
account.Deposit(1000);
bool success = account.Withdraw(500);
Console.WriteLine($"取款成功: {success}, 余額: {account.GetBalance()}"); 
// 輸出: 取款成功: True, 余額: 500

高級特性

1. 接口

接口定義了一組方法簽名,但不包含實現。類可以實現多個接口。

// 定義接口
public interface IAnimal
{void Eat();void Sleep();
}// 實現接口
public class Cat : IAnimal
{public void Eat(){Console.WriteLine("貓吃魚");}public void Sleep(){Console.WriteLine("貓睡覺");}
}// 使用接口
IAnimal cat = new Cat();
cat.Eat();   // 輸出: 貓吃魚
cat.Sleep(); // 輸出: 貓睡覺
2. 抽象類

抽象類不能實例化,只能作為基類。它可以包含抽象方法和非抽象方法。

// 抽象類
public abstract class Vehicle
{public abstract void Start(); // 抽象方法public void Stop(){Console.WriteLine("車輛停止");}
}// 具體類
public class Car : Vehicle
{public override void Start(){Console.WriteLine("汽車啟動");}
}// 使用抽象類
Vehicle car = new Car();
car.Start(); // 輸出: 汽車啟動
car.Stop();  // 輸出: 車輛停止
3. 事件與委托

委托是一種類型,它可以引用一個或多個方法。事件基于委托,用于實現發布-訂閱模式。

// 定義委托
public delegate void EventHandler(string message);// 發布者類
public class Publisher
{// 定義事件public event EventHandler? MyEvent;public void RaiseEvent(){MyEvent?.Invoke("事件被觸發");}
}// 訂閱者類
public class Subscriber
{public void HandleEvent(string message){Console.WriteLine($"收到消息: {message}");}
}// 使用事件和委托
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();// 訂閱事件
publisher.MyEvent += subscriber.HandleEvent;// 觸發事件
publisher.RaiseEvent(); // 輸出: 收到消息: 事件被觸發
4. 特性(Attributes)

特性用于為程序元素(類、方法、屬性等)添加元數據。

// 自定義特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class DescriptionAttribute : Attribute
{public string Description { get; }public DescriptionAttribute(string description){Description = description;}
}// 應用特性
[Description("這是一個用戶類")]
public class User
{[Description("獲取用戶名")]public string GetUserName(){return "John Doe";}
}// 反射獲取特性信息
Type type = typeof(User);
DescriptionAttribute? classAttr = type.GetCustomAttribute<DescriptionAttribute>();
Console.WriteLine($"類描述: {classAttr?.Description}");MethodInfo method = type.GetMethod("GetUserName");
DescriptionAttribute? methodAttr = method?.GetCustomAttribute<DescriptionAttribute>();
Console.WriteLine($"方法描述: {methodAttr?.Description}");// 輸出:
// 類描述: 這是一個用戶類
// 方法描述: 獲取用戶名

總結

C# 的面向對象編程提供了豐富的特性,包括類、繼承、多態、封裝、接口、抽象類、事件委托和特性等。這些特性使得代碼更加模塊化、可維護和可擴展,是構建大型應用程序的基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86244.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86244.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86244.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

感知框2D反投是咋回事?

一、感知框&#xff1a;“2D 框反投” 是咋回事&#xff1f;&#xff08;以自動駕駛識別車輛為例&#xff09; 1. 核心邏輯&#xff1a;從圖像特征 “反推” 目標框 簡單說&#xff0c;先用算法在 2D 圖像里識別特征&#xff08;比如車輛的輪廓、顏色、紋理&#xff09;&#…

五分鐘了解@ExcelIgnoreUnannotated注解

ExcelIgnoreUnannotated 是 EasyExcel 框架中的一個注解&#xff0c;用于控制 Excel 導入/導出時對實體類字段的處理方式。它的作用如下&#xff1a; 核心功能 忽略未標注 ExcelProperty 的字段 當添加 ExcelIgnoreUnannotated 到類上時&#xff0c;EasyExcel 會 跳過所有未顯…

Windows電腦數據恢復終極指南:從原理到實戰

Windows電腦數據恢復終極指南&#xff1a;從原理到實戰 數據丟失是每個電腦用戶都可能遭遇的噩夢。本文將為您全面解析Windows平臺下的數據恢復技術&#xff0c;從基礎原理到高級技巧&#xff0c;幫助您在文件誤刪、格式化、系統崩潰等情況下找回寶貴數據。 一、數據恢復基礎…

【網絡入侵檢測】基于Suricata源碼分析應用協議識別實現

【作者主頁】只道當時是尋常 【專欄介紹】Suricata入侵檢測。專注網絡、主機安全&#xff0c;歡迎關注與評論。 1. 概要 &#x1f44b; 本文聚焦Suricata網絡安全引擎的協議解析器實現&#xff0c;詳細剖析HTTP、SSL/TLS、FTP、SSH、SMTP等協議的解析流程。 2. 源碼分析 2.1 H…

Nginx SSL/TLS協議棧中配置深度解析與實踐指南-優雅草卓伊凡

Nginx SSL/TLS協議棧中配置深度解析與實踐指南-優雅草卓伊凡 引言&#xff1a;SSL/TLS的重要性與Nginx配置挑戰 在當今互聯網環境中&#xff0c;SSL/TLS加密已成為網站安全的基本要求。根據Google透明度報告顯示&#xff0c;截至2023年&#xff0c;全球Chrome瀏覽器加載的網頁…

C++字符串的行輸入

1、字符串的輸入 下面用一個真實的示例來進行演示&#xff1a; #include<iostream> #include<string>int main() {using namespace std;const int ArSize 20;char name[ArSize];char dessert[ArSize];cout << "Enter your name:\n";cin >>…

征服分布式系統:阿里云 Linux 多機互聯與資源共享實戰指南

征服分布式系統&#xff1a;阿里云 Linux 多機互聯與資源共享實戰指南 文章目錄 征服分布式系統&#xff1a;阿里云 Linux 多機互聯與資源共享實戰指南一、分布式系統架構概述二、阿里云網絡基礎架構解析三、多機互聯基礎配置1. 環境準備2. 網絡連通性測試3. SSH 密鑰認證配置 …

AI三步診斷心理:比ChatGPT更懂人心

用人工智能(大語言模型)輔助心理治療的研究 解決心理治療中專業人員不足的問題,提出了一種叫“思維診斷”(DoT)的方法,讓AI通過三個步驟來識別患者的“認知扭曲”(也就是負面、不合理的思維模式)。 背景:心理治療的困境 全世界約八分之一的人有心理問題,但心理咨詢師…

C++【生存游戲】開發:荒島往事 第一期

字幕君已上線...... 副字幕君已上線...... 計數君已上線...... 彩色字幕君 ( 花了重金請來的 ) 已上線...... Doge智能系統已上線...... Doge:嗨嗨我又來了&#xff01; 觀眾們......已上線&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; OK LETS GO&am…

k8s強制刪除podpvpvc和nsnamespace

k8s如何強制刪除pod&pv&pvc和ns&namespace方法 namespace、pod、pv、pvc全部處于“Terminating”狀態時&#xff0c;此時的該名稱空間下的所有控制器都已經被刪除了&#xff0c;之所以出現pod、pvc、pv、ns無法刪除&#xff0c;那是因為kubelet 阻塞&#xff0c;有…

Python基礎--4--Python常用代碼示例

1、文件讀寫操作&#xff08;常用于日志處理、數據導入導出&#xff09; 1、代碼示例 &#xff08;1&#xff09;讀取文本文件內容 with open("data.txt", "r", encoding"utf-8") as f:content f.read()print(content)&#xff08;2&#xf…

單項循環鏈表及帶頭指針的鏈表

單項循環鏈表及其帶頭指針的鏈表 對于鏈表我們要仔細深入的學習它&#xff0c;為何呢&#xff0c;因為他是我們在后面學習非線性數據結構的基礎&#xff0c;像后面的樹&#xff0c;圖等結構都是由鏈表演變出來的&#xff0c;所以我們這篇博客繼續探究鏈表 帶頭指針的鏈表 我…

八股文——JAVA基礎:解釋下什么是面向對象?面向對象和面向過程的區別

面向對象和面向過程是編程的不同思想&#xff1a; 面向過程如c語言的編程形式&#xff0c;在編程時定義的是一個方法&#xff0c;然后后續執行只需要關注這個方法的作用&#xff0c;而不會將方法進行抽象&#xff0c;也就是只關注程序執行的過程細節。 面向對象如java&#x…

SuperMap iServer 關閉數據目錄(datacatalog)、地圖打印(webprinting)等服務

背景 漏洞掃描發現有部分低危 web 漏洞&#xff0c;項目又暫未使用數據目錄服務&#xff0c;所以最簡單的方案是直接關閉服務。 查閱文檔發現處理自動化服務可以修改webapps\iserver\WEB-INF\iserver-geoprocessing.xml 的 enable 屬性為 false 關閉&#xff0c;機器學習服務…

PyTorch 張量(Tensors)全面指南:從基礎到實戰

文章目錄 什么是張量&#xff1f;張量初始化方法1. 直接從數據創建2. 從 NumPy 數組轉換3. 基于現有張量創建4. 使用隨機值或常量 張量屬性張量操作設備轉移索引和切片連接張量算術運算單元素張量轉換 原地操作&#xff08;In-place Operations&#xff09;PyTorch 與 NumPy 互…

Maven是什么?

Maven是一個流行的Java項目管理和構建工具&#xff0c;主要用于自動化項目構建、依賴管理和項目文檔生成等工作。以下是對它的簡單介紹&#xff1a; 核心功能 依賴管理&#xff1a;自動管理項目所需的第三方庫&#xff08;如JAR包&#xff09;&#xff0c;通過在配置文件中聲…

etcd教程-快速入門使用(截圖實操)集群搭建 + 原理解釋

大家好&#xff0c;我是此林。 etcd 是一個高可用的鍵值對存儲系統&#xff0c;常用于分布式系統中保存配置、服務發現和協調信息。它是 CNCF 旗下的項目之一&#xff0c;也是 Kubernetes 的核心組件之一&#xff0c;用來存儲集群狀態。 可以說&#xff0c;云原生場景下經常使…

OpenSSL 混合加密

openssl 中文網&#xff1a; https://www.openssl.net.cn/ 目錄 對稱加密特點常見算法案例&#xff08;使用 AES&#xff09; 非對稱加密特點常見算法案例&#xff08;使用 RSA&#xff09; 混合加密場景加密&#xff08;使用 AES&#xff09;解密 總結 對稱加密 特點 加密和解…

AI驅動的DevOps運維與云服務部署自動化

引言 當前&#xff0c;云計算和DevOps實踐讓開發者能夠管理成百上千臺服務器和容器&#xff0c;但隨之而來的運維復雜度也急劇提升。運維工程師經常需要部署多環境應用、維護大規模云主機、排查集群故障等任務。這些任務不僅涉及繁瑣的腳本編寫和命令行操作&#xff0c;還需要對…

Spring Boot動態數據源切換:優雅實現多數據源管理

在復雜的企業應用中&#xff0c;多數據源管理是常見需求。本文將介紹如何基于Spring Boot實現優雅的動態數據源切換方案&#xff0c;通過自定義注解和AOP實現透明化切換。 核心設計思路 通過三層結構實現數據源動態路由&#xff1a; 1. 注解層&#xff1a;聲明式標記數據源 2…