《Effective C#》Item 5:提供一个有意义的ToString函数

日志篇一、C#实现item自定义颜色的ListBox,显示日志 一、说明 ListBox自身的OnDrawItem函数是专门绘制item样式的,只需要重载即可 protected override void OnDrawItem(DrawItemEventArgs e) { e.DrawBackground(); e.DrawFocusRectangle(); ... 阅读详情

在编写自定义类型的时候,即使我们不写ToString函数,系统也会自动提供ToString函数,例如:

    public class clsUserInfo

    {

        private string strUserName;

        ……

    }

 

不过系统所提供ToString函数,并不做太多的事情,无法真实的反映当前对象的一些属性,就如上这段代码,调用ToString返回的结果和GetType后转换成String是一样的。那么这样的返回值对于调用者来说没有太多的意义。

 

为了能提供一个有意义的ToString函数,则需要重载ToString函数来实现一个面向此对象的ToString函数。举例说明,对于上面clsUserInfo这个类型,如下这种写法会使ToString函数更有意义。

    public class clsUserInfo

    {

        private string strUserName;

        ……

        public override string ToString()

        {

            return string.Format( "User name:{0}", strUserName );

        }

    }

 

提供一个有意义的ToString函数,对于进行调试或者发布此类都是很有用,因为这种做法是最简便的方法,相对于访问类的成员属性然后再组合字符串。不过大家写代码的时候,包括我在内,往往忽略了去提供一个有意义的ToString函数,这点看来要在今后的编码中进行改善。

 

除了重载系统提供的ToString函数外,在C#中还可以继承IFormattable接口,来提供更复杂的ToString函数,至于这方面,我不想多说,因为继承了接口,提供的ToString函数会有很多变化,这也许只有到真正的应用当中才能更深刻的体会到。

C#核心特性与开发实践全解析 面向对象编程是现代软件开发的基础范式,C#作为.NET平台的主力语言,通过统一的类型系统和自动内存管理机制实现了高效开发。其核心特性包括泛型编程确保类型安全、LINQ实现声明式数据操作、async/await简化异步编程,这些技术显著提升了工程实践中的开发效率和代码质量。特别是在企业级应用开发中,C#的反射机制和特性系统为元编程提供了强大支持,而委托与事件模型则完善了观察者模式的实现。随着.NET生态的跨平台发展,C#结合Visual Studio等工具链,已成为Web服务、桌面应用和游戏开发等场景的热门选 阅读详情

相关推荐

Azure Blob Storage企业级数据管理:上传、安全与自动化策略

对象存储是现代数据平台的基础设施核心,其本质是为海量非结构化数据提供高可靠、低成本、强一致性的持久化能力。Azure Blob Storage 作为典型代表,通过 RESTful 接口、分层存储(Hot/Cool/Archive)、生命周期策略等机制,实现数据从写入到归档的全周期治理。技术价值在于将权限控制(RBAC + SAS)、加密(SSE/CMK)、网络隔离(VNet/Firewall)深度集成于服务原生能力中,显著降低合规风险与运维复杂度。典型应用场景包括医疗影像归档、IoT日志沉淀、备份数据湖构建

dengwan3818的博客 382

enumerate() 函数和items()函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中 基本语法:enumerate(sequence, [start=0]) 参数: sequence – 一个序列、迭代器或其他支持迭代对象。 start – 下标起始位置。 如: seasons = [‘Spring’, ‘Summer’, ‘F...

xiaozhiamy的博客 1919

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 701

item系列内置函数

点的方式操作属性与attr相关: 中括号的方式操作属性与item系列相关 __ setitem __ __ getitem __ __ delitem __

weixin_43760098的博客 908

【Kingbase人大金仓】授权文件更换

本文介绍了金仓数据库授权文件更换的步骤:1.通过ksql或客户端工具查询数据库版本;2.在官网下载对应版本的license.bat文件;3.替换前先备份原授权文件(使用tar命令压缩),再用新文件覆盖原文件。注意事项包括:版本号需严格对应,授权文件通常位于安装目录下,可使用find命令查找具体位置。操作需谨慎,建议先备份原文件以便恢复。

qq_34463511的博客 3458

简单的服务器取证

记一次入门服务器取证——药品直销网,涵盖旧版本宝塔、静态IP的配置更改、代码的理解

m0_74559567的博客 3756

.item()函数用法

>>> x = torch.tensor([1.0]) >>>> x.item() 1.0 用来将tensor格式转化为python的数据类型格式。

weixin_44543648的博客 3449

【CSP-J/S初赛知识点整理】

CSP-J/S初赛知识点整理

qq_43884946的博客 1万+

item()和items()的用法详解与区别

item() item()的作用是取出单元素张量的元素值并返回该值,保持该元素类型不变。 听起来和使用索引来取值的作用好像一样,接下来我们看一看使用两种方法取元素值的区别: 首先定义一个张量: 1、直接使用索引取值: 2、使用item()取出 由此可以看出使用item()函数取出的元素值的精度更高,所以在求损失函数等时我们一般用item() items() items()的作用是把字典中的每对key和value组成一个元组,并把这些元祖放在列表中返回。 举个例子:

wangxuecheng666的博客 1万+

华为OD机试 - 音乐小说内容重复识别 - 并查集(Java 双机位C卷 200分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 159

DJI O2协议物理层逆向工程解析:揭开无人机通信的神秘面纱

DJI的O2协议是其OcuSync传输技术的最新演进,应用于Mini 2、Mavic Air 2、Mavic Air 2s和Mavic 3等无人机模型。这种协议结合了多种先进无线通信技术,能够在远距离提供稳定可靠的低延迟连接。O2协议物理层(PHY)是OSI模型的最底层,负责在物理媒介上传输原始数据比特流。它定义了电气特性、调制方式、编码方案、数据传输速率和同步机制等。DJI O2协议的物理层逆向工程是一个复杂但极具价值的领域。

QQ_778132974的博客 2385

C++实现量子计算模拟器:原理与优化实践

量子计算模拟器是利用经典计算机模拟量子行为的重要工具,其核心原理是通过复数向量表示量子态的叠加与纠缠。在工程实现层面,C++凭借其高性能计算特性成为理想选择,特别是模板元编程和SIMD指令优化能有效处理量子门操作。从技术价值看,这类模拟器不仅帮助开发者理解量子算法本质,还能为真实量子计算机开发提供验证环境。典型应用场景包括量子算法教学、量子程序调试以及混合量子-经典算法开发。通过内存布局优化、多线程并行等技巧,用C++实现的模拟器可稳定处理26+量子比特系统,其中Reddit社区热议的Grover搜索算法优

weixin_34127717的博客 262

TRAE智能体开发:TRAE概述

TRAE(/treɪ/)深度融合 AI 能力,是一名能够理解需求、调用工具并独立完成各类开发任务的“AI 开发工程师”,帮助你高效推进每一个项目。

王国平的博客 1262

Effective C# Item 5: Always Provide ToString()

Item 5: Always Provide ToString() 在.net开发环境中System.Object.ToString()是最常用到的方法之一。我们应当为每个类的客户程序提供恰当的格式化输出信息。对于用户程序来说,通过这个格式化的string可以在Windows Form、web或者控制台中很方便的显示其类型信息,同时还便于调试。我们每创建一个类都应当为它重写符...

aijinyao5713的博客 200

基于Simulink的双向DC-DC变换器在储能系统中的应用仿真

摘要:本文详细介绍了基于Simulink的双向DC-DC变换器在光伏储能系统中的仿真实现。主要内容包括:1)采用非隔离型双向Buck-Boost拓扑作为储能系统枢纽;2)针对750V直流微网中的20kWh锂电池接口场景进行建模;3)详细阐述双闭环控制器设计(电压外环+电流内环)、工作模式判断逻辑等关键步骤;4)通过仿真验证了系统在功率阶跃和模式切换下的性能。文章提供了完整的建模流程和控制方法,为储能系统接口设计提供了实用参考。

amy_mhd的博客 178

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Effective C# Item5:总是提供ToString()方法

C#中,System.Object默认提供了ToString()方法, 它会返回当前对象的完整类型名称,即命名空间 + "." + 类名,这种信息,对于类的使用者或者终端用户来说,可读性都很低,因此,建议在新建一个类时,重写ToString()方法。     如果不重写ToString()方法,那么为了向用户显示一些有意义的信息,就需要在每个调用这个类的地方,编写相同的代码,这样会造成很大的代码

尹自强.DoSomething() 425

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Item 5: Always Provide ToString()(Effective C#)

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceEffectiveCSharpItem57{8publicclassCustomer:IFormattable9{10...

weixin_30487701的博客 139

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C#学习资料《Effective C#》

Item 1: Always Use Properties Instead of Accessible Data Members《Effective C#》Item 1:用属性来访问类的私有成员http://blog.youkuaiyun.com/knight94/archive/2006/06/04/772886.aspxItem 2: Prefer readonly to const《Effectiv

SharpRose的专栏 1232

[MAF预定义的AIContextProvider-10]TodoProvider:用TodoList驱动Agent的任务执行

该文介绍了一种解决大型语言模型(LLM)执行多步骤复杂任务时注意力涣散问题的方法——使用TodoList机制。通过创建TodoList记录任务步骤,并在每完成一步后标记状态,可有效避免步骤遗漏或重复。文章以自动化部署为例,展示了如何通过TodoProvider和四个工具函数(PullLatestCode、BuildDockerImage等)实现可靠的多步骤部署流程。代码示例演示了Agent如何严格按TodoList顺序执行,并在每步完成后调用标记功能,最终输出清晰的部署结果和状态报告,显著提升了复

JaydenAI的博客 513

C#.NET初级开发者面试必备21~30题解析

在C#.NET开发中,理解值类型与引用类型的区别、字符串拼接优化、装箱拆箱性能损耗等基础概念至关重要。这些核心知识点不仅关系到代码效率,更是面试中的高频考点。通过哈希表实现的Dictionary、基于状态机的async/await异步编程、以及LINQ查询的延迟执行机制,都体现了.NET框架的设计精髓。合理使用StringBuilder预分配容量、采用泛型集合避免装箱、利用GC分代算法管理内存,能在实际项目中显著提升性能。本文通过典型代码示例,演示如何在高并发场景下选用ConcurrentDictionar

weixin_30595035的博客 439

《Effective C#》Item 9:区别和认识四个判等函数

.Net有四个判等函数?不少人看到这个标题,会对此感到怀疑。事实上确是如此,.Net提供了ReferenceEquals、静态Equals,具体类型的Equals以及==操作符这四个判等函数。但是这四个函数之间有细微的关系,改变其中一个函数的实现会影响到其他函数的操作结果。 首先要说的是Object.ReferenceEquals和Object.Equals这两个静态函数,对于它们俩来说,

愚翁专栏 9109
上一篇: 《Effective C#》Item 4:使用Conditional属性来代替IF/ENDIF程序块
下一篇: 《Effective C#》Item 6:区分值类型和引用类型
Knight94
博客等级 码龄25年 1013粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值