C#学习疑问:内置值类型(如int、double)是否实现接口?
C#内置值类型的接口实现问题
当然有,C#中的int(对应CLR类型System.Int32)、double(对应System.Double)这类内置值类型,都默认实现了多个常用接口,举几个核心的:
IComparable/IComparable<T>:提供值比较能力,比如你调用int.CompareTo(20)或者double.CompareTo(3.14)时,就是在调用这个接口的方法。IEquatable<T>:用于类型安全的相等判断,num.Equals(10)这种写法就是基于这个接口的实现,比直接用==更严谨(避免隐式类型转换带来的问题)。IConvertible:支持不同类型之间的转换,比如int.ToDouble()、double.ToString()这类类型转换操作,底层都依赖这个接口的方法。IFormattable:支持自定义格式的字符串输出,比如double.ToString("C")生成货币格式字符串,就用到了这个接口。
当你把这些值类型的实例赋值给它们实现的接口变量时,确实会触发装箱操作,比如:
int num = 10; IComparable cmp = num; // 此处发生装箱
内容的提问来源于stack exchange,提问作者HosseinSedghian
相关产品推荐
相关产品推荐

