当前位置: 首页 > news >正文

C# 为什么要限制静态方法的使用

前言

在工作了一年多之后,我发现静态方法的耦合问题实在是头疼。如果可以尽量不要使用静态方法存储数据,如果要存储全局数据就把数据放在最顶层的主函数里面。

静态方法问题

耦合问题,不要用静态方法存储数据

我这里有两个静态方法:A和B。A和B都各种存储A_Data和B_Data。如果两个静态方法一直互相调用,就会导致耦合过高,无法控制数据流向的问题。

A
Method_A_1
Data_B
Method_A_2
Method_A_3
Data_A
B
Method_B_1
Method_B_2
Method_B_3

可以看到,这个已经乱成一锅粥了

Mermaid源码

graph LRA--> Method_A_1-->Data_B
A--> Method_A_2-->Data_B
A--> Method_A_3-->Data_A
A--->Data_AB--> Method_B_1-->Data_A
B--> Method_B_2-->Data_A
B--> Method_B_3-->Data_B
B--->Data_B

所以静态方法尽量只存放方法,不要存放变量。比如字符串切割,数组拼接,敏感字去除。

扩展方法

这里推荐使用扩展方法来解决,扩展方法很好的限制了输入和输出,不会出现耦合数据的情况
微软扩展方法文档

如何改变面向过程的思维

喜欢用静态方法,其实还是面向过程的思维,就是在写方法的时候,就已经知道我可以直接去拿Static_A的静态参数。静态方法最容易出现的就是配置文件的读取。

面向过程,直接去静态函数里面拿参数

直接调用
直接调用
直接调用
Static_A
Data
A
Method_A
B
Method_B
C
Method_C
这样是面向过程的思想,ABC可以直接去拿Static_A的参数
如果参数A被污染就会导致参数不可控,非常的危险

面向对象,在构造函数里面将参数注入

构造函数注入
Data
A_Data_
Method_A调用Data

这个才是面向对象的思想。

如果参数过多怎么办?

方法1:将参数写对象


method(string a,int b,int [] c)//改成method(Data a)class Data{public string a {get;set;}public int b {get;set;}public int[] c {get;set;}
}

方法2:通过委托实现回调

这里不展开说

方法3:依赖注入和IOC控制反转

这里不展开说

http://www.lryc.cn/news/184082.html

相关文章:

  • 【已解决】Pyecharts折线图,只有坐标轴没有折线数据
  • win10搭建Selenium环境+java+IDEA(3)
  • String 、Stringbuffer、StringBuilder区别
  • 如何提升爬虫IP使用效率?精打细算的方法分享
  • (高阶) Redis 7 第19讲 缓存过期淘汰策略 大厂篇
  • 【四旋翼飞行器】模拟四旋翼飞行器的平移和旋转动力学(Simulink仿真实现)
  • Kaggle - LLM Science Exam(一):赛事概述、数据收集、BERT Baseline
  • mmap底层驱动实现(remap_pfn_range函数)
  • 品牌如何查窜货
  • Java基于SpringBoot的车辆充电桩
  • 【ARM】(1)架构简介
  • 企业完善质量、环境、健康安全三体系认证的作用及其意义!
  • <HarmonyOS第一课>运行Hello World——闯关习题及答案
  • NLP 02 RNN
  • @PostConstruct注解
  • 拓世AI|中秋节营销攻略,创意文案和海报一键生成
  • 基于知识蒸馏的两阶段去雨去雪去雾模型学习记录(三)之知识测试阶段与评估模块
  • 代码随想录二刷day46
  • 计算机竞赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python
  • 在线图片转BASE64、在线BASE64转图片
  • 什么是RPA?一文了解RPA发展与进程!
  • 【云备份项目】【Linux】:环境搭建(g++、json库、bundle库、httplib库)
  • 工信部教考中心:什么是《研发效能(DevOps)工程师》认证,拿到证书之后有什么作用!(下篇)丨IDCF
  • Linux进程相关管理(ps、top、kill)
  • 微服务技术栈-Ribbon负载均衡和Nacos注册中心
  • 知识图谱和大语言模型的共存之道
  • enum, sizeof, typedef
  • (二)激光线扫描-相机标定
  • pytorch 数据载入
  • angular 在vscode 下的hello world