C#知识笔记

访问修饰符

由高到底: 

  1. public:最高级别的访问修饰符,表示可以从任何地方访问。

  2. protected internal:表示成员既能被同一个类或其派生类访问,也可以被同一个程序集中的其他类访问。

  3. internal:表示成员只能在定义它的程序集内访问。对于其他程序集的类来说,internal成员是不可见的。

  4. protected:表示成员只能在同一个类或其派生类中访问。另外,如果成员属于同一个程序集的其他类,则也可以访问。

  5. private:最低级别的访问修饰符,表示只能在同一个类中访问。私有成员对于其他类是不可见的。

这些访问修饰符可用于类的定义和成员的定义,以控制类和成员的访问级别,从而实现封装和信息隐藏的概念。注意,在默认情况下,类成员的访问修饰符是private。

设计模式的六大原则

单一职责

Single Responsibility Principle

定义1 一个类只负责一个功能领域中的相应职责

定义2 就一个类而言,应该只有一个引起它变化的原因。

心得:

单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需 要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强 的分析设计能力和相关实践经验—只有熟悉业务,才能做好设计。

建议:

1.如果类型足够简单,可以在类级别去违背单一职责

2 如果方法足够简单,可以在方法级别去违背单一职责

3 如果类型复杂了,方法逻辑多了,建议遵循单一职责原则

4 一个方法,不超过50行(编码建议) 5 一个类,不超过300行(编码建议)

优缺点:

优点: 1 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单 的多; 2 提高类的可读性,提高系统的可维护性; 3 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功 能时,可以显著降低对其他功能的影响。

缺点: 1 拆多了零碎,不好管理,不好使用,成本高。

里氏替换原则

Liskov Substitution Principle

定义 1 如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程 序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

定义 2 所有引用基类的地方必须能透明地使用其子类的对象 (继承就是父类出现的都可以用子类,透明是要求行为无变化) 里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产 生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话, 那么它不一定能够使用基类对象

总结

1 尽量声明的时候用父类,而不是具体子类(跟依赖倒置很想)

2 子类不要篡改父类的行为,或者virtual/abstract

迪米特法则

定义 迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽 可能少的了解,只和朋友通信,不和陌生人说话。英文简写为: LOD。 一个对象应该对其他对象保持最少的了解。 类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越 大。

目标都是为了低耦合,高内聚。 耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、 方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是 说,陌生的类最好不要作为局部变量的形式出现在类的内部。

应用范围

1 小到类与类之间:避免跟局部变量交互

2 到类库和类库之间,三层之间:UI-BLL-DAL,UI和DAL不要通信

3 大到系统和系统之间:调用用户数据,只能找用户服务,不能找数据库

依赖倒置原则

Dependence Inversion Principle 定义 设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。 简单说:依赖抽象,而不是依赖细节 抽象:抽象类/接口—包含没有实现的 细节:具体的类---所有的元素都是确定的 抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合 性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成 的风险。

依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。 (插头(可以各种造型各种材质)-插排---车子轮胎-17寸18寸19寸—接口大小) 以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。 抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制 定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去 完成。

建议

1 低层模块尽量都要有抽象类或接口,或者两者都有;

2 变量的声明类型尽量是抽象类或接口;

3 使用继承时遵循里氏替换原则(避免埋雷) 依赖倒置原则的核心就是要我们面向抽象/接口编程,理解了面向抽象/接口编程,也就 理解了依赖倒置。

接口隔离原则

Interface Segregation Principle

定义: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上

1 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是事实,但 是如果过小,则会造成接口数量过多,使设计复杂化,所以一定要适度;

2 接口细节屏蔽(导航---定位-计算路线-语音播报);

3 通过接口继承来组合接口 。

接口隔离和单一职责的区别: 其一,单一职责原则原注重的是职责;而接口隔离原则注重对接口依赖的隔离。 其二,单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中的实现和 细节;而接口隔离原则主要约束接口,主要针对抽象,针对程序整体框架的构建。

开闭原则

Open Closed Principle

定义 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

面向对象语言是一种静态语言,最害怕变化,会波及很多东西,需要全面测试 最理想就是新增类,对原有代码没有改动,原有的代码才是可信的 开闭原则只是一个目标,并没有任何的手段,也被称之为总则 其他5个原则的建议,就是为了更好的做到OCP 开闭原则也是面向对象语言开发一个终极目标

踩坑笔记

1.在.NET6环境开发,下载NuGet包时,会默认下载到非项目文件目录,这对代码拷贝移植非常不友好,经本人摸索,在每个项目中加入以下代码即可

<RestorePackagesPath>..\packages</RestorePackagesPath>

 

 NuGet包会下载到当前项目中packages目录下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值