C#开发习惯散记

访问修饰符

  1. 抽象类不能被实例化,只能被继承
  2. 被protected标记过的方法,只有在这个方法所在类和继承这个类的子类中可以访问到这个方法。
  3. 被sealed标记过的类,不能被继承。
  4. 如果这个类的功能写的足够完备,没有需求去继承该类重新自定义类的时候,可以将这个类标记为sealed
  5. internal标记的方法和方法仅限于在当前程序集内进行访问

只读权限

  1. 如果不想让同事修改某个变量的数据时

    可给变量标记readonly,标记的字段在声明之后就不能再修改了

  2. 也可以考虑把字段写成属性,只设置get的属性,就也可以设置不能修改

  3. 如果想让同事只在类的内部修改或者子类中修改,可以设置private set;或者 protected set;

  4. 如果是确定该字段不能被修改,可以直接把readonly直接修改为const,这样就彻底改不了了,除此之外const不占内存,比readonly更节省内存。

  5. 如果必须修改,被readonly标记的字段也可以通过反射进行修改,typeof(MyDeviceManager).GetField()

  6. 使用readonly的一种比较常见的场景:

    比如private readonly ILogger _logger;

    是典型的控制反转,给构造里添加这样的一个参数,把依赖给注入进来,然后赋值给它之后,这个实例的值在当前的类中就不会再发生变化了

只读集合类型

使用readonly的不常见的场景:使用只读类型集合ReadOnlyDictionary

  1. 如果一个字典是内的元素不允许修改,可以将对象存入只读元素的字典中
  2. 使用只读形式的字典,只允许读取,不允许改变元素的值
  3. 可以访问到字典元素内部的键值对应的 方法,并且使用字典自带的方法

非公开构造函数

应用场景:如果对一个类设置了一个单例,就需要做一个限制,去限制同事去从其他地方实例化这个类,以避免出现新的对象和这个单例所代表的对象不同,可以做一个非公开(私有的)的构造函数就可以实现这个功能。当类中的构造函数是私有的话,就不可以重新new一个新的对象。

接口封装

如果一个类继承接口后,实现接口的方法逻辑是通过调用接口的方法实现的,那么这个类的实例化对象就无法调取类中实现的方法,需要将类显示的转化为接口类型,然后再调用接口的方法。

异步相关

  1. 如果方法是异步的,应该把方法的结尾命名成Async结尾
  2. 在接口中约束一个异步方法的时候就只标记Task即可,而在实现这个接口中的异步的方法的时候可以标记Async Task也可以只标记Task
  3. 在抽象类中可以约束一个异步方法标记为Async Task,但是也不建议,通常只标记Task即可。

抛出异常

在不同情况下都手动写一个自定义的异常抛出,以便定位问题

扩展方法

不要轻易的给一些常见的类型写扩展方法,更不要把这个扩展方法放到了一个很常见的命名空间下,以免污染常用的数据类型环境影响同事工作。

posted @ 2026-04-01 14:36  hélium  阅读(15)  评论(0)    收藏  举报