86.方便的double转string属性 C#例子 WPF例子

在C#开发中,属性封装是一种常见的设计模式,它可以帮助我们更好地控制数据的访问和修改,同时提供更灵活的功能扩展。今天,我们就来探讨一个简单而优雅的属性封装示例:PowerPowerFormatted

1. 问题背景

在实际开发中,我们经常需要处理一些数值类型的数据,比如功率(Power)。这些数据可能需要以不同的格式展示给用户,比如保留几位小数。同时,我们还需要确保这些数据的值只能通过类内部的方法来修改,以保证数据的完整性和一致性。

2. 属性定义

2.1 Power 属性

public double Power { get; private set; } = double.NaN;
  • 访问修饰符

    • public get:允许外部代码读取这个属性的值。

    • private set:只允许在类的内部修改这个属性的值。外部代码无法直接设置这个属性的值,只能通过类内部的方法来修改。

  • 默认值double.NaN,表示这个属性的初始值是“非数字”(Not a Number)。这通常用于表示未初始化或无效的值。

2.2 PowerFormatted 属性

public string PowerFormatted
{get { return Power.ToString("F3"); }
}
  • 计算属性:这个属性没有set访问器,它是一个只读的计算属性。它的值是根据Power的值动态计算的,保留三位小数("F3")。

3. 示例代码

以下是一个完整的示例,展示如何使用这两个属性:

public class PowerReader
{public double Power { get; private set; } = double.NaN;public string PowerFormatted{get { return Power.ToString("F3"); }}// 方法:更新Power的值public void UpdatePower(double newPower){Power = newPower;}
}public class Program
{public static void Main(){PowerReader powerReader = new PowerReader();// 更新Power的值powerReader.UpdatePower(123.456789);// 读取Power的值Console.WriteLine("Power: " + powerReader.Power); // 输出:123.456789// 读取PowerFormatted的值Console.WriteLine("PowerFormatted: " + powerReader.PowerFormatted); // 输出:123.457}
}

输出结果

Power: 123.456789
PowerFormatted: 123.457

4. 优点

  1. 封装性

    • Power 属性的 set 访问器是私有的,外部代码无法直接修改它的值,只能通过类内部的方法(如 UpdatePower)来更新。这确保了数据的完整性和一致性。

  2. 灵活性

    • PowerFormatted 属性提供了一个格式化后的字符串,方便在UI中展示。这种设计使得数据的展示和存储分离,提高了代码的可维护性。

5. 总结

通过这种封装方式,我们可以更好地控制数据的访问和修改。PowerPowerFormatted 的设计符合C#的最佳实践。希望这个示例能给你带来一些启发,帮助你在实际开发中写出更优雅的代码。

如果你有任何问题或建议,欢迎在评论区留言,我们一起交流学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bun 版本管理工具 bum 安装与使用

在使用 node 的过程中,我们可能会因为版本更新或者不同项目的要求而频繁切换 node 版本,或者是希望使用更简单的方式安装不同版本的 node,这个时候我们一般会用到 nvm 或者类似的工具。 在我尝试使用 bun 的时候,安装前第一个想到…

GRE,MGRE

GRE:静态过程,有局限性 R1 : [r1]interface Tunnel 0/0/0 --- 创建一个虚拟的隧道接口 [r1-Tunnel0/0/0]ip address 192.168.3.1 24 --- 给隧道接口分配一个 IP 地址 [r1-Tunnel0/0/0]tunnel-protocol gre --- 定义接口的封装方式 [r1-Tun…

游戏无法启动?XINPUT1_3.dll 丢失的终极解决方案

当你兴奋地启动一款新游戏时,突然弹出一个错误提示——‘程序无法启动,因为计算机中丢失 XINPUT1_3.dll’。这种问题在 PC 玩家中非常常见,尤其是运行一些较老的游戏时。XINPUT1_3.dll 是 DirectX 运行库的关键组件,缺失会导致游戏…

用大语言模型学文学常识

李白的诗句“右军本清真”中的“清真”并非指伊斯兰教信仰,而是对王羲之(王右军)人格和艺术境界的赞美。以下是对这一问题的详细分析: “清真”的古代含义 在魏晋至唐代的语境中,“清真”一词多用于形容人的品格高洁、…

css炫酷的3D水波纹文字效果实现详解

炫酷的3D水波纹文字效果实现详解 这里写目录标题 炫酷的3D水波纹文字效果实现详解项目概述技术栈核心实现1. 基础布局2. 渐变背景3. 文字效果实现3.1 基础样式3.2 文字漂浮动画 4. 水波纹效果4.1 模糊效果4.2 水波动画 5. 交互效果 技术要点项目难点与解决方案总结 项目概述 在…

八、重学C++—动态多态(运行期)

上一章节: 七、重学C—静态多态(编译期)-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146999362?spm1001.2014.3001.5502 本章节代码: cpp/dynamicPolymorphic.cpp CuiQingCheng/cppstudy - 码云 - 开源中…

eventEmitter实现

没有做任何异常处理,简单模拟实现 事件对象的每一个事件都对应一个数组 /*__events {"事件1":[cb1,cb2],"事件2":[cb3,cb4],"事件3":[...],"事件4":[...],};*/class E{__events {};constructor(){}//注册监听回调on(type , callbac…

Mysql 中 B 树 vs B+ 树

🌳 什么是 B树 和 B树? 它们都是多路平衡查找树(M-Way Search Tree),用于提升磁盘读写效率,常用于数据库(如 MySQL)、操作系统中的索引结构。 🔍 B树 和 B树 的核心区别…

蓝桥云客---九宫幻方

1.九宫幻方 - 蓝桥云课 九宫幻方 题目描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3 * 3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又…

OrangePi5Plus开发板不能正确识别USB 3.0 设备 (绿联HUB和Camera)

1、先插好上电(可正确识别) 2、上电开机后插入USB 3.0 设备,报错如下,只能检测到USB2.0--480M,识别不到USB3.0-5Gbps,重新插拔也不行 Apr 4 21:30:00 orangepi5plus kernel: [ 423.575966] usb 5-1: re…

LiveData 和 MutableLiveData 的区别

LiveData 和 MutableLiveData 的区别 主要在于是否可以修改数据,但它们的工作原理基本相同。下面我们深入对比它们的行为、特性,以及它们在 ViewModel 和 UI 层中的使用方式。 1. LiveData 和 MutableLiveData 的基本区别 特性LiveDataMutableLiveData可…

SDK中窗口调用

存在窗口A和B的win32程序 , 当点击窗口A中的按钮后会弹出窗口B #include <windows.h>// 窗口 B 的窗口过程 LRESULT CALLBACK WindowProcB(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg) {case WM_DESTROY:PostQuitMessage(0);break;default:ret…

进行性核上性麻痹:饮食调理为健康护航

进行性核上性麻痹是一种复杂的神经退行性疾病&#xff0c;目前虽无法根治&#xff0c;但合理的健康饮食有助于缓解症状、提高患者生活质量。 高蛋白质食物在患者饮食中占据重要地位。鱼肉&#xff0c;尤其是富含 Omega-3 脂肪酸的三文鱼、鳕鱼等&#xff0c;不仅蛋白质含量丰富…

【Windows+Cursor】从0到1配置Arxiv MCP Server,实现论文自主查询、下载、分析、综述生成

1. 安装UV Installation | uv powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" 将安装路径添加到环境变量 C:\Users\xxxxxx\.local\bin 2. git clone 代码 git clone https://github.com/blazickjp/arxiv-mcp-server.git…

WPF 教程:给 TreeView 添加 SelectedItem 双向绑定支持(MVVM-Friendly)

&#x1f332;WPF 教程&#xff1a;给 TreeView 添加 SelectedItem 双向绑定支持&#xff08;MVVM-Friendly&#xff09; 在 WPF 的 MVVM 应用中&#xff0c;TreeView 是非常常见的控件&#xff0c;但它有个“顽固”的缺陷&#xff1a; ❗它的 SelectedItem 不是依赖属性&…

Linux环境下内存错误问题排查与修复

最近这几天服务器总是掉线&#xff0c;要查一下服务器的问题。可以首先查看一下计算机硬件&#xff0c;这是一台某鱼上拼凑的服务器&#xff1a; sudo lshw -shortH/W path Device Class Description system NF5270M3 (To be filled by O…

函数和模式化——python

一、模块和包 将一段代码保存为应该扩展名为.py 的文件&#xff0c;该文件就是模块。Python中的模块分为三种&#xff0c;分别为&#xff1a;内置模块、第三方模块和自定义模块。 内置模块和第三方模块又称为库内置模块&#xff0c;有 python 解释器自带&#xff0c;不用单独安…

windows下载安装远程桌面工具RealVNC-Server教程(RealVNC_E4_6_1版带注册码)

文章目录 前言一、下载安装包二、安装步骤三、使用VNC-Viewer客户端远程连接&#xff0c;输入ip地址&#xff0c;密码完成连接 前言 在现代工作和生活中&#xff0c;远程控制软件为我们带来了极大的便利。RealVNC - Server 是一款功能强大的远程控制服务器软件&#xff0c;通过…

Android Dagger 2 框架的注解模块深入剖析 (一)

本人掘金号&#xff0c;欢迎点击关注&#xff1a;https://juejin.cn/user/4406498335701950 一、引言 在 Android 开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是一种强大的设计模式&#xff0c;它能够有效降低代码的耦合度&…

HTML语言的空值合并

HTML语言的空值合并 引言 在现代Web开发中&#xff0c;HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础语言。随着前端技术的快速发展&#xff0c;开发者们面临着大量不同的工具和技术&#xff0c;尤其是在数据处理和用户交互方面。空值合并是一些编程语言中常用…