news 2026/7/5 4:36:31

【设计原则和建议】 方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【设计原则和建议】 方法

静态方法和实例方法

1.静态方法应该是线程安全的

  • 调用方使用静态方法(如Console.Write),调用方会预期静态方法是线程安全的

public static Dictionary<string, object> dict = new Dictionary<string, object>(); public static ConcurrentDictionary<string, object> concurrentDict = new ConcurrentDictionary<string, object>(); public static void Test1() { if (!dict.ContainsKey("key"))//线程不安全 { dict["key"] = "value"; } } public static void Test2() { concurrentDict["key"] = "value";//线程安全, }


2.如果一个方法没有使用到this,那么考虑声明为静态方法

3.基本类库和常用方法优先设计为静态方法 (如Log.Error SqlHelper.Execute)

4.为什么选择静态方法

  • 容易实现面向过程的编程
  • 静态方法调用较为简单,少了一个new的过程
  • 如果希望设计一个较为独立的方法(和类中的其他对象关系较少),静态方法是一个较好的选择 ,静态方法往往更容易移植
  • 性能较好

1.不需要在运行时判断多态 (没有继承链的问题)

2.调用静态方法不需要传递实例对象指针

3.实例方法需要至少new一个对象, 有GC的压力

5.为什么选择实例方法

  • 和面向对象的设计结合较好
  • 借助多态等,功能比静态方法要强大



方法可访问性

1.在声明方法的时候显式声明可访问性, 不要使用默认值,以免不熟悉默认访问性的开发者搞错了

2.保持最低的可访问性, 例如能private的就不要public

  • 避免第三方错误调用了不应该public的方法
  • 避免第三方引用了public方法以后,在重构时无法移除该方法

3. 使用new关键字复写父类方法 , 一般要保持同级或者较高的可访问性

public class ClassA { public virtual void Test() { } } public class ClassC : ClassA { protected new void Test() //bad { } }



方法继承

1.如果想重写父类的方法,一定要用new关键字显式覆盖,以免非预期的重写

public class ClassA { public void Test() { } } public class ClassB : ClassA { public new void Test()//good { } } public class ClassC : ClassA { public void Test() //bad { } }


2.某些方法需要一起被override, 例如 IComparable.CompareTo 和 Equals , 又例如重写运算符的时候 = 和 !=

3.只在希望子类override方法实现的时候使用virtual关键字

4.不要在构造函数中调用虚方法

  • 调用虚方法时,直到运行时之前都不会选择执行该方法的实际类型。 构造函数调用虚方法时,可能尚未执行调用该方法的实例的构造函数。

5.如果是实现了Dispose方法,那么在该方法体内,请调用父类的Dispose方法


对比

1.和属性对比

  • 属性返回值相对静态,所以DateTime.Now是一个不好的设计(因为Now的值会一直变化)
  • 方法返回值相对动态,所以Guid.NewGuid()是一个好的设计
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 4:33:45

再回到技术面,研究 T-SQL 的 UNION、EXISTS、EXCEPT、INTERSECT 运算符。

「DBA 了解业务是非常必要的」&#xff0c;确实如此。不管您担任的是 IT 的哪种职务&#xff0c;都应深入了解所任职公司的业务和流程&#xff0c;结合既有的 IT 专长&#xff0c;发展出自己在公司的「不可替代性」&#xff0c;甚至去思考老板、公司的好高高层们&#xff0c;想…

作者头像 李华
网站建设 2026/7/5 4:28:50

freerots接口代码示例

/*** @file main.c* @brief FreeRTOS 全面测试程序* @note 覆盖14项FreeRTOS特性:基础任务、互斥量、递归互斥量、二值/计数信号量、* 消息队列、软件定时器、事件组、任务通知、流缓冲区、消息缓冲区、* 优先级翻转演示、动态任务创建/删除、空闲钩…

作者头像 李华
网站建设 2026/7/5 4:27:13

《通信电子线路》全套PPT课件

《通信电子线路》全套PPT课件 课件参考&#xff1a;《通信电子线路》 张静教材 课件内容&#xff1a; 第1章绪论.pptx 第2章选频网络与阻抗匹配网络.pp女x 第3章高频小信号放大器.pptx 第4章高频功率放大器.pptx 第5章正弦波振荡器.pptx 第6章振幅调制与解调.pptx 第7章 变频器…

作者头像 李华
网站建设 2026/7/5 4:26:56

OpenClaw 2.7.9 搭建实操,桌面自动化工具避坑完整流程

如今&#xff0c;各类对话式AI工具层出不穷&#xff0c;但大多仅支持文字交互&#xff0c;难以直接操控本地文件、浏览器及办公软件。OpenClaw 主打本地部署 自动化执行&#xff0c;能够接收自然语言指令&#xff0c;自主完成各类电脑操作&#xff0c;深受职场人士与技术爱好者…

作者头像 李华
网站建设 2026/7/5 4:25:15

怎样在5分钟内免费将图片转换为SVG矢量图形:SVGcode实用指南

怎样在5分钟内免费将图片转换为SVG矢量图形&#xff1a;SVGcode实用指南 【免费下载链接】SVGcode Convert color bitmap images to color SVG vector images. 项目地址: https://gitcode.com/gh_mirrors/sv/SVGcode 你是否曾为图片放大后变得模糊而烦恼&#xff1f;想要…

作者头像 李华