- 1、字符串
- string 是关键字,Systme.String是一个类。
- 字符串对象是“不可变的”:它们在创建后无法更改。 看起来是在修改字符串的所有 String 方法和 C# 运算符实际上都是在新的字符串对象中返回结果。 在下面的示例中,当 s1 和 s2 的内容被串联在一起以形成单个字符串时,两个原始字符串没有被修改。 += 运算符创建一个新的字符串,其中包含组合的内容。 这个新对象被分配给变量 s1,而分配给 s1 的原始对象被释放,以供垃圾回收,因为没有任何其他变量包含对它的引用。
- 格式字符串:
- 内插字符串由 $ 特殊字符标识,并在大括号中包含内插表达式
- 3、区别对待强制转型和as与is
- 如果类型之间都上溯到了某个共同的基类,那么根据此基类进行的转型(即基类转型为子类本身)应该使用as。子类与子类之间的转型,则应提转换操作符,以便进行强制转型。
- as只能用于引用类型,不能用于值类型。强制转换可以用于任何类型。
- 4、TryParse比Parse好
- TryParse比Parse效率高很多,不是一个数量级。
- 5、使用int?确保值类型也可以是null
- 6、区别readonly和const
- const是一个编译器常量(天然就是static,无需再加static修饰符),readonly是一个运行时常量
- const只能修饰基元类型、枚举和字符串,readonly没有限制。
- const是属于类级别而不是实例对象级别,不能跟static一起使用。而readonly既可以是类级别也可以是实例级别,可以与static一起使用。
- 7、将0作为枚举类型的默认值
- 9、习惯运算符重载
- 在CLR支持的类型中,使用operator关键字创建静态成员函数实现运算符重载。
- 10、创建对象时需要考虑是否实现比较器
- 11、区别对待==和Equals
- 所谓相等,对于值类型表示值相等,对于引用类型,表示引用同一个对象。
- 一把来说,对于引用类型,我们要定义“值相等性”,我们应该仅仅重载Equals方法,同时用==表示“引用相等性”。
- FCL中提供了Object.ReferenceEquals方法,该方法比较的是,两个实例是否是同一个实例。
- 12、重写Equals时也要重写GetHashCode
- 如果重写Equals方法的时候不重写GetHashCode方法,在使用Dcitionary类时,会隐含一些潜在的bug。
- 13、为类型输出格式化字符串
- 一种是让类型继承接口IFormattable,重写ToString方法,如果没有为类型重写该方法,会调用Object的ToString方法,它返回类型的名称。
- 一种是为类型自定义格式化器,可以根据需求的变化为类型提供多个格式化器。一个典型的格式化器应该继承接口IFormatProvider和ICustomFormatter
- 14、正确实现浅拷贝和深拷贝
- 无论深拷贝还是浅拷贝,微软都建议实现ICloneable接口明确告诉调用者该类型可以被拷贝。
- 浅拷贝的实现:return this.MemnerwiseClone();
- 15、使用dynamic简化反射的实现
posted @
2021-09-26 15:24
ChristalXue
阅读(
105)
评论()
收藏
举报