question:Why not to have a Int8 and UInt8 types instead of Byte and SByte in .Net framework
You mean SByte and Byte. Int8 would be signed SByte, UInt8 would be unsigned
Byte.This also highlights the problem: some languages (notably VB.NET) have nosupport for unsigned integers (they're not CLS-compliant). On the otherhand, they do all support Byte. Conversely, they don't have to support SByte(and, predictably, VB.NET doesn't support it). This is one mismatch thatjustifies a different type name: integers are mostly signed, bytes aremostly unsigned, and language support reflects this.Although you're technically right that a byte is an unsigned 8-bit integer,it's rarely considered that way, and a signed 8-bit integer is even lessobvious. For example, you don't often perform arithmetic on bytes -- youcopy them around and manipulate their bits. This is another reason why it'sByte and not UInt8.Finally, Java started the tradition with byte, and it's no secret that theCLR was heavily inspired by the JVM. The difference is that .NET actuallygot it right by making "byte" unsigned. Java went for a foolish consistency,eliminated unsigned types altogether, and made programmers' lives miserableeverywhere by forcing them to deal with signed bytes (which complicate codefor the vast majority of cases).Of course, I didn't work on the CLR, so this is just my justification. I'drepeat the decision if I were designing the type system.