C#值類型屬性的典型問題

問題復現:值類型屬性的副本問題

以下代碼展示了值類型屬性的典型問題:

struct Point
{public int X;public int Y;
}class MyClass
{public Point Position {get; set;}
}// 使用屬性修改結構體(無效!)
var obj = new MyClass();
obj.Position.X = 10; // 錯誤:修改的是副本,原始_point未變化

obj.Position.X = 10;

等價于

Point temp=obj.Position; //值類型的復制其實是建立一個副本,與原數據沒有關聯

temp.X=10,

解決方案:三種正確修改值類型屬性的方法

方法 1:重新賦值整個結構體
var temp = obj.Position;
temp.X = 10;
obj.Position = temp; // 正確:通過setter更新原始結構體
方法 2:通過類(MyClass)的方法封裝修改邏輯
class MyClass
{private Point _point;public Point Position{get => _point;set => _point = value;}// 提供修改方法public void SetPositionX(int x){_point.X = x; // 直接修改私有字段}
}// 使用
obj.SetPositionX(10); // 正確:直接修改原始結構體
方法 3:將結構體改為類(引用類型)
class Point // 改為類(引用類型)
{public int X;public int Y;
}class MyClass
{public Point Position {get; set;}
}// 使用(直接修改有效)
obj.Position.X = 10; // 正確:修改的是引用指向的對象

總結:屬性與值類型的交互規則

場景行為解決方案
屬性返回值類型(結構體)每次返回副本,直接修改無效通過方法封裝或重新賦值整個結構體
屬性返回引用類型(類)返回引用,修改直接生效無需特殊處理
字段是值類型直接訪問原始數據,修改生效但違反封裝原則,慎用
需要頻繁修改狀態的對象使用類而非結構體避免值類型復制開銷和語義問題

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

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

相關文章

機器學習基礎-k 近鄰算法(從辨別水果開始)

一、生活中的 "分類難題" 與 k 近鄰的靈感 你有沒有這樣的經歷:在超市看到一種從沒見過的水果,表皮黃黃的,拳頭大小,形狀圓滾滾。正當你猶豫要不要買時,突然想起外婆家的橘子好像就是這個樣子 —— 黃色、圓…

【WPF】NumericUpDown的用法

在 WPF(Windows Presentation Foundation)中,NumericUpDown 控件并不是內置的標準控件之一,但它是一個非常常用的控件,用于讓用戶輸入一個數值(整數或浮點數),并提供上下箭頭來遞增或…

Kotlin位運算

Kotlin 提供了幾種用于操作整數各個位(bit) 的運算符。這些操作是由處理器直接支持的,速度快且操作簡單。在底層編程中非常重要,比如設備驅動、低級圖形處理、網絡通信、加密和壓縮等。 盡管計算機通常都有高效的硬件指令來執行算…

墨者:通過手工解決SQL手工注入漏洞測試(MongoDB數據庫)

一、SQL手工注入漏洞測試(MongoDB數據庫) 本文以墨者學院靶場為例,演示MongoDB數據庫的手工SQL注入全過程。靶場以自己的地址為準:http://124.70.71.251:42286/new_list.php?id1 二、注入原理說明 MongoDB作為NoSQL數據庫,其注入方式與傳…

Kafka——CommitFailedException異常處理深度解析

引言在分布式消息系統Kafka的生態中,消費者組(Consumer Group)機制是實現高吞吐量和負載均衡的核心設計。然而,消費過程中位移提交(Offset Commit)的穩定性始終是開發者面臨的最大挑戰之一。當消費者嘗試提…

kafka的部署和jmeter連接kafka

zookeeper的安裝 kafka依賴Zookeeper所以要先安裝Zookeeper kafka的安裝文章引用來源:Kafka下載和使用(linux版)-CSDN博客 通過wget命令安裝 # 安裝wget https://downloads.apache.org/zookeeper/stable/apache-zookeeper-3.7.1-bin.tar.gz# 解壓tar…

Android UI 組件系列(八):ListView 基礎用法與適配器詳解

博客專欄:Android初級入門UI組件與布局 源碼:通過網盤分享的文件:Android入門布局及UI相關案例 鏈接: https://pan.baidu.com/s/1EOuDUKJndMISolieFSvXXg?pwd4k9n 提取碼: 4k9n 一、引言 在上一篇文章《Android UI 組件系列(…

Android學習專題目錄(持續更新)

1.Android 調試 1.1:Logcat日志分析 2.Android編譯 2.1:android編譯過程中的mk文件和bp文件的掃描機制 2.2:Android 構建系統中常見的 .mk 文件及其作用 2.3:Android構建系統中的mk文件語法函數 2.4:安卓中定…

c#Lambda 表達式與事件核心知識點整理

一、Lambda 表達式1. 概念 Lambda 表達式是一種匿名函數(無名稱的函數),簡化了委托和匿名方法的寫法,格式為: (參數列表) > 表達式或語句塊 它可以作為參數傳遞,或賦值給委托類型變量。2. 基本語法與簡寫…

Springboot+Layui英語單詞學習系統的設計與實現

文章目錄前言詳細視頻演示具體實現截圖后端框架SpringBootLayUI框架持久層框架MyBaits成功系統案例:參考代碼數據庫源碼獲取前言 博主介紹:CSDN特邀作者、985高校計算機專業畢業、現任某互聯網大廠高級全棧開發工程師、Gitee/掘金/華為云/阿里云/GitHub等平臺持續輸…

主要分布于內側內嗅皮層的層Ⅲ的邊界向量細胞(BVCs)對NLP中的深層語義分析的積極影響和啟示

邊界向量細胞(Boundary Vector Cells, BVCs)主要分布于內側內嗅皮層(MEC)層Ⅲ,通過編碼環境邊界(如墻壁、障礙物)的距離和方向信息,為空間導航提供幾何參考框架。這一神經機制對自然…

Selenium是解決了什么問題的技術?

Selenium 是一種用于自動化瀏覽器操作的技術,主要解決了以下問題:1. 自動化測試 Selenium 最初是為了解決 Web 應用程序的自動化測試 問題而設計的。它可以幫助開發者和測試人員: 模擬用戶操作:如點擊按鈕、填寫表單、選擇下拉菜單…

JavaSE知識點(2)

目錄 訪問修飾符的區別 this關鍵字的作用 抽象類和接口有什么區別 抽象類可以定義構造方法嗎 但是接口不可以定義構造方法 Java支持多繼承嗎 接口可以多繼承嗎 繼承和抽象的區別? 抽象類和普通類的區別 成員變量和局部變量的區別? staic關鍵字…

(實用教程)Linux操作系統(二)

centos配置靜態ip 注意: 1.系統中的網關要與虛擬機編輯器中的網關保持一致 2.如果配置虛擬機編輯器后發現ping不通外網的時候,就要還原默認設置再進行配置 總結: 虛擬機編輯器需要配置ip,網關,其中ip網段以及最后一…

ThinkPHP8集成RabbitMQ的完整案例實現

ThinkPHP8集成RabbitMQ的完整案例實現一、安裝依賴:需通過Composer安裝php-amqplib庫?二、配置RabbitMQ三、生產者1、發送一個郵件,將任務發送到RabbitMQ隊列中。2、運行結果展示四、啟動消費者:命令行執行php think rabbitmq:consumer1&…

解密負載均衡:如何輕松提升業務性能

什么是負載均衡 負載均衡:Load Balance,簡稱LB,是一種服務或基于硬件設備等實現的高可用反向代理技術,負載均衡將特定的業務(web服務、網絡流量等)分擔給指定的一個或多個后端特定的服務器或設備,從而提高了 公司業務的…

mac neo4j install verifcation

本文使用conda環境安裝,neo4j所依賴jdk也采用conda install的方式安裝。 1 neo4j下載 點擊如下鏈接,選擇community, Linux/Mac Executor,點擊Download Community。 本文下載的安裝包是 neo4j-community-2025.06.2-unix.tar.gz 2 安裝neo4j …

【Oracle】Oracle分區表“排雷“指南:當ORA-14400錯誤找上門時如何優雅應對

引言:分區表里的"定時炸彈"凌晨三點的機房,你盯著屏幕上刺眼的ORA-14400: 插入的分區鍵值超出所有分區范圍錯誤,后背發涼。這個錯誤就像埋在分區表里的定時炸彈,一旦觸發就會讓整個應用癱瘓。但別慌!本文將帶…

設計模式(十四)行為型:職責鏈模式詳解

設計模式(十四)行為型:職責鏈模式詳解職責鏈模式(Chain of Responsibility Pattern)是 GoF 23 種設計模式中的行為型模式之一,其核心價值在于將多個處理對象(處理器)連接成一條鏈&am…

WAIC 2025 熱點解讀:如何構建 AI 時代的“視頻神經中樞”?

一、🌐 WAIC 2025 大會看點:AI 正在“長出眼睛與身體” 在 2025 年的人工智能大會(WAIC 2025)上,“大模型退幕后,具身智能登場”成為最具共識的趨勢轉向。從展區到主論壇,再到各大企業發布的新…