13.07.2015 Views

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Chapter 8 <strong>Language</strong> OverviewIn contrast, the variable j2 denotes a “jagged” array, or an “array of arrays”. Specifically, j2 denotes anarray of an array of int, or a single-dimensional array of type int[]. Each of these int[] variables can beinitialized individually, and this allows the array to take on a jagged shape. The example gives each of theint[] arrays a different length. Specifically, the length of j2[0] is 3, the length of j2[1] is 6, and thelength of j2[2] is 9.[Note: In C++, an array declared as int x[3][5][7] would be considered a three dimensional rectangulararray, while in <strong>C#</strong>, the declaration int[][][] declares a jagged array type. end note]The element type and shape of an array—including whether it is jagged or rectangular, and the number ofdimensions it has—are part of its type. On the other hand, the size of the array—as represented by the lengthof each of its dimensions—is not part of an array’s type. This split is made clear in the language syntax, asthe length of each dimension is specified in the array creation expression rather than in the array type. Forinstance the declarationint[,,] a3 = new int[10, 20, 30];has an array type of int[,,] and an array creation expression of new int[10, 20, 30].For local variable and field declarations, a shorthand form is permitted so that it is not necessary to re-statethe array type. For instance, the exampleint[] a1 = new int[] {1, 2, 3};can be shortened toint[] a1 = {1, 2, 3};without any change in program semantics.The context in which an array initializer such as {1, 2, 3} is used determines the type of the array beinginitialized. The exampleclass Test{static void Main() {short[] a = {1, 2, 3};int[] b = {1, 2, 3};long[] c = {1, 2, 3};}}shows that the same array initializer syntax can be used for several different array types. Because context isrequired to determine the type of an array initializer, it is not possible to use an array initializer in anexpression context without explicitly stating the type of the array.8.2.4 Type system unification<strong>C#</strong> provides a “unified type system”. All types—including value types—derive from the type object. It ispossible to call object methods on any value, even values of “primitive” types such as int. The exampleusing System;class Test{static void Main() {Console.WriteLine(3.ToString());}}calls the object-defined ToString method on an integer literal, resulting in the output “3”.The example21

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!