Int32 vs. int
-
Hi, in C++ ist die größe eines "int" ja je nach Platform durchaus unterschiedlich. In C# dagegen ist "int" ein Synonym für "Int32". Das ist wie ich eben nochmal gegoogelt habe sogar so spezifiziert. Ich erinnere mich da auch an heftige Diskussionen vor einigen Jahren weil es in C# keinen Datentyp gibt der "variabel" ist. Sprich man hat vielleicht irgendwann 128 bit Systeme und ein heutiger "int" wäre auf einer solchen Platform dann womöglich ein "Int64". Hätte man dann eine Klasse List mit einem Member "Int32 _capacity" würde die Klasse jedoch vom größeren Zahlenraum nicht profitieren. Jedoch wenn man den Member als "int _capacity" definiert hätte, da ja ein "int" nun einem "Int64" entspricht. Warum ich das nun schreibe? Nun ja ich bin gerade über folgenden Code (von Microsoft) gestolpert und habe mich nach der Intention dahinter gefragt:
private const long UnmanagedMemStreamMaxLength = Int64.MaxValue; ... public override long Seek(long offset, SeekOrigin loc) { ... if (offset > UnmanagedMemStreamMaxLength) throw new ArgumentOutOfRangeException("offset", Environment.GetResourceString("ArgumentOutOfRange_UnmanagedMemStreamLength"));
Diese Abfrage ist ja wenn "long" ein Synonym für "Int64" ist quatsch, da sie nie erfüllt sein kann. Oder lässt sich MS hiermit doch die Möglichkeit offen den Zahlenbereich von "int" bzw. "long" usw. in Zukunft womöglich anzupassen? Dann wäre es natürlich guter Stil sofern man nicht explizit eine bestimmte Datentypgröße haben möchte möglichst mit "int", "long" usw. anstatt "Int32" zu arbeiten. Gut machen wahrscheinlich eh die meisten weil kürzer zu schreiben.
-
Nope: long ist ein System.Int64
C# type/keyword Range Size .NET type long -9,223,372,036,854,775,808 Signed 64-bit integer System.Int64 to 9,223,372,036,854,775,807