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.

<strong>C#</strong> LANGUAGE SPECIFICATION• The program does not use either “::” or “->” operators. The “::” is not an operator at all, and the“->” operator is used in only a small fraction of programs (which involve unsafe code). Theseparator “.” is used in compound names such as Console.WriteLine.• The program does not contain forward declarations. Forward declarations are never needed, asdeclaration order is not significant.• The program does not use #include to import program text. Dependencies among programs arehandled symbolically rather than textually. This approach eliminates barriers between applicationswritten using multiple languages. For example, the Console class need not be written in <strong>C#</strong>.8.2 Types<strong>C#</strong> supports two kinds of types: value types and reference types. Value types include simple types (e.g.,char, int, and float), enum types, and struct types. Reference types include class types, interface types,delegate types, and array types.Value types differ from reference types in that variables of the value types directly contain their data,whereas variables of the reference types store references to objects. With reference types, it is possible fortwo variables to reference the same object, and thus possible for operations on one variable to affect theobject referenced by the other variable. With value types, the variables each have their own copy of the data,and it is not possible for operations on one to affect the other.The exampleusing System;class Class1{public int Value = 0;}class Test{static void Main() {int val1 = 0;int val2 = val1;val2 = 123;Class1 ref1 = new Class1();Class1 ref2 = ref1;ref2.Value = 123;Console.WriteLine("Values: {0}, {1}", val1, val2);Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);}}shows this difference. The output produced isValues: 0, 123Refs: 123, 123The assignment to the local variable val1 does not impact the local variable val2 because both localvariables are of a value type (the type int) and each local variable of a value type has its own storage. Incontrast, the assignment ref2.Value = 123; affects the object that both ref1 and ref2 reference.The linesConsole.WriteLine("Values: {0}, {1}", val1, val2);Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);deserve further comment, as they demonstrate some of the string formatting behavior ofConsole.WriteLine, which, in fact, takes a variable number of arguments. The first argument is a string,which may contain numbered placeholders like {0} and {1}. Each placeholder refers to a trailing argumentwith {0} referring to the second argument, {1} referring to the third argument, and so on. Before the outputis sent to the console, each placeholder is replaced with the formatted value of its corresponding argument.16

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

Saved successfully!

Ooh no, something went wrong!