为什么Color使用Int32 over Byte?

ser*_*0ne 9 .net c# types

使用此示例:

Color.FromArgb(Int32,Int32,Int32)

根据指定的8位颜色值(红色,绿色和蓝色)创建颜色结构.alpha值隐式为255(完全不透明).尽管此方法允许为每个颜色分量传递32位值,但每个分量的值限制为8位.

如果每个组件的值限制为8位,那么他们为什么不使用Byte而不是Int32

在更广泛的范围内,我发现人们使用Int32非常普遍,即使是Int16或者Byte足够.是否有使用什么特别的原因Int32 一般Int16,Byte等?

usr*_*usr 5

我的猜测是某些.NET语言不太支持byte.也许它不符合CLS,我不记得了.这些天不再关心CLS合规性,但在1.0天内,这是一个重要的功能级别.另请注意,VB.NET不支持无符号类型,这是跨.NET语言对整数的不同支持的示例.

使用int构造函数特别奇怪,因为A, R, G, B属性是byte.

我认为这是一个API设计错误.

Color结构不是一般的特别漂亮.它不仅具有ARGB值,还具有a KnownColor和名称.许多问题都被塞进了这个结构中.为了好玩,该Equals方法有一个错误:return name.Equals(name);.当然,这总是如此.这个结构看起来很仓促.您可以从该Equals方法中判断出代码作者不知道字符串具有重载的相等运算符.运算符equals Color是刚刚复制的15行.我想这个问题的真正答案是:实习生做到了!


通常,这Int32是优选的,因为大多数算术运算扩展到32位,并且它是普通硬件的有效整数宽度.较短的整数类型用于更多特殊用途.

因为有人建议这可以节省低价:我不明白这一点.扩展整数转换是隐式的,没有有意义的性能成本(通常没有).