Chapter 20. C Language Reference

Chapter 20. C# Language Reference

The following table describes the syntax of various C# language elements. The left column shows the syntax for each element, and the right column includes one or more examples.

Arrays

   
 
 type [*] +   array-name   =  [   new   type   [   dimension   + ][*]*;    { value1, value2, ... }; ] 
 byte[ ] arr1 = new byte[10]; int[ ] arr2 = {0, 1, 2}; ([*] is the set: [ ] [,] [,,] etc.) 

Attributes

   
 
 [[   target   :]?   attribute-name   (   positional-param   +  [   named-param   =   expr   ]+   positional-param   +, [   named-param   =   expr   ]+)?] 
 [assembly:CLSCompliant(false)] [WebMethod(true,    Description="My web method")] 

Break statement

   
 
 break; 
 break; 

Checked/unchecked

   
 
 checked (   expr   ) unchecked (   expr   ) 
 // throws exception short x = 32767; int i = checked( (short) ++x ); // silently overflows to -32768 short y = 32767; int j = unchecked( (short) ++y ); 
 
 checked   [statement  statement-block]   unchecked   [statement  statement-block]   
 // throws exception public short foo( ) {   short y = 32767;   checked {     return ++y;   } } // silently overflows public short bar( ) {   short y = 32767;   unchecked {     return ++y;   } } 

Class declaration

   
 
   attributes   ? unsafe?   access-modifier   ? new?  [ abstract  sealed ]? class   class-name   [:   base-class   :   interface   +    :   base-class, interface   + ]? {   class-members   } 
 public class MyClass : Base, IFoo {   // ... } 

Constant declaration

   
 
 const   type   [   variable = constant-expr   ]+; 
 const int xyzzy = 42; 

Constant fields

   
 
   attributes   ?   access-modifier   ? new?   const type   [   constant-name   =   constant-expr   ]+; 
 internal const byte fnord = 23; 

Continue statement

   
 
 continue; 
 continue; 

Delegates

   
 
   attributes   ? unsafe?   access-modifier   ? new? delegate [ void   type   ]   delegate-name   (   parameter-list   ); 
 public delegate void    MyHandler(object s, EventArgs e); 

Destructors

   
 
   attributes   ? unsafe? ~   class-name   ( )   statement-block   
 ~SomeClass( ) {   // destructor code } 

Do-While loops

   
 
 do   [   statement statement-block]   while (   Boolean-expr   ); 
 int i = 0; do { // print 0 through 9   Console.WriteLine(i++); } while(i < 10); 

Empty statements

   
 
 ; 
 i = 0; while(i++ < 10)   ; // take no action Console.WriteLine(i); // prints 11 

Enums

   
 
   attributes   ?   access-modifier   ? new? enum   enum-name   [ :   integer-type   ]? { [   attributes   ?   enum-member-name   [ =   value   ]? ]* } 
 [Flags] public enum Color : long {   Red = 0xff0000,    Green = 0x00ff00,    Blue = 0x0000ff }; //... // prints "Green, Red" Color yellow = (Color) 0xffff00; Console.WriteLine(yellow); 

Events

   
 
   attributes   ? unsafe?   access-modifier   ? [  [[sealed  abstract]? override]   new? [virtual  static]? ]? event   delegate-type event-name   
 event MyDelegate OnClickedSomething; // ... OnClickedSomething(arg1, arg2); 

Event accessors

   
 
   attributes   ? unsafe?   access-modifier   ? [  [[sealed  abstract]? override]   new? [virtual  static]? ]? event   delegate-type event-accessor-name   {   attributes   ? add   statement-block     attributes   ? remove   statement-block   } 
 event MyDelegate OnAction {   add {     // ...   }   remove {     // ...   } } 

Expression statements

   
 
 [   variable   =]?   expr   ; 
 a = 10 * 10; a++;  b = ++a; 

Fields

   
 
   attributes   ? unsafe?   access-modifier   ? new? static? [readonly  volatile]? type [   field-name   [ =   expr   ]? ]+ ; 
 protected int agent = 0x007; 

Fixed statements

   
 
 fixed ([   value-type   void ]*   name   =                     [&]?   expr   )   statement-block   
 byte[ ] b = {0, 1, 2}; fixed (byte* p = b) {   *p = 100; // b[0] = 100 } 

For loops

   
 
 for (   statement   ?;   Boolean-expr   ?;   statement   ?)   [statement  statement-block]   
 // print 0 through 9 for(int j=0; j<10; j++)   Console.WriteLine(j); 

Foreach loops

   
 
 foreach (   type-value   in IEnumerable )   statement or statement-block   
 StringCollection sc =    new StringCollection( ); sc.Add("Hello"); sc.Add("World"); foreach(String s in sc)   Console.WriteLine(s); 

Goto statement

   
 
 goto   statement-label   ; goto   case-constant   ; 
 i = 0; MyLabel: if(++i < 100)   goto MyLabel; Console.WriteLine(i); 

If-Else statement

   
 
 if (   Boolean-expr   )   [statement  statement-block]   [ else   [statement  statement-block]   ]? 
 if(choice =  = "A") {   // ... } else if (choice =  = "B") {   // ... } else {   // ... } 

Indexers

   
 
   attributes   ? unsafe?   access-modifier   ? [   [[sealed  abstract]? override]    new? [virtual  abstract  static]? ]?   type   this [   attributes   ? [   type arg   ]+ ] {   attributes   ? get    //   read-only     statement-block     attributes   ? set    //   write-only     statement-block     attributes   ? get    //   read-write     statement-block     attributes   ? set   statement-block   } 
 string this[int index] {   get {     return somevalue;   }   set {     // do something with      // implicit "value" arg   } } 

Instance constructors

   
 
   attributes   ? unsafe?   access-modifier   ?   class-name   (   parameter-list   )  [ :[ base  this ] (   argument-list   ) ]?   statement-block   
 MyClass(int i) {   // perform initialization } // Initialize with default MyClass( ) : this(42) { } 

Interfaces

   
 
   attributes   ? unsafe?   access-modifier   ? new? interface   interface-name   [ :   base-interface   + ]? {   interface-members   } 
 interface IFoo :    IDisposable, IComparable {   // member declarations } 

Lock statement

   
 
 lock (   expr   )   [statement  statement-block]   
 lock(this) {   int tmp = a;   a = b;   b = tmp; } 

Method declaration syntax

   
 
   attributes   ? unsafe?   access-modifier   ? [   [[sealed  abstract]? override]    new? [virtual  abstract      static extern?]? ]? [ void   type   ]   method-name   (   parameter-list   )   statement-block   
 public abstract int MethA(object o); public virtual void MethB(int i,                            object o)  {   // statements... } 

Namespace

   
 
 namespace   name   + {   using-statement*   [   namespace-declaration     type-declaration   ]* } (namespace is dot-delimited) (namespace-declaration has no delimiters) 
 namespace OReilly.CSharp {   using System;   interface IFoo : IComparable {  }   public class MyClass {  } } 

Parameter list

   
 
 [   attributes   ? [ref  out]?   type arg   ]* [ params   attributes   ?   type   [ ]   arg   ]? 
 void MethA(ref int a, out int b) {   b = ++a; } void MethB(params string[ ] args)  {   foreach (string s in args)     Console.WriteLine(s); } // ... int a = 20, b; MethA(ref a, out b); Console.WriteLine("a={0}, b={1}",                   a, b); MethB("hello", "world"); 

Properties

   
 
   attributes   ? unsafe?   access-modifier   ? [   [[sealed  abstract]? override]    new? [virtual  abstract  static]? ]?   type property-name   { [   attributes   ? get    //   read-only     statement-block     attributes   ? set    //   write-only     statement-block     attributes   ? get    //   read-write     statement-block     attributes   ? set   statement-block   ] } 
 private string name; public string Name {   get {     return name;   }   set {     name = value;   } } 

Return statement

   
 
 return   expr   ?; 
 return; return x; 

Statements and statement blocks

   
 
 statement 
 int x = 100; 
 
 statement-block 
 {   int x = 100;   Console.WriteLine(x);   return x; } 

Static constructors

   
 
   attributes   ? unsafe? extern? static   class-name   ( )   statement-block   
 static MyClass( ) {   // initialize static members } 

Struct declaration

   
 
   attributes   ? unsafe?   access-modifier   ? new? struct   struct-name   [:   interface   +]? {   struct-members   } 
 public struct TwoFer {   public int part1, part2; } 

Switch statement

   
 
 switch (   expr   ) { [ case   constant-expr   :   statement   * ]* [ default   : statement*   ]? } 
 switch(choice) {   case "A":     // ... do something     break;   case "B":     // ... do something     // then branch to A     goto case "A";   case "C":   case "D":     // ... do something     break;   default:     Console.WriteLine("bad choice");     break; } 

Throw statement

   
 
 throw   exception-expr   ?; 
 throw new    Exception("something's wrong"); 

Try statements and exceptions

   
 
 try   statement-block   [catch (   exception type value   ?)?   statement-block   ]+  finally   statement-block   [catch (   exception type value   ?)?   statement-block   ]+ finally   statement-block   
 try {   // do something } catch (Exception) {   // recover } finally {   // this will always    // be called } 

Using statement

   
 
 using (declaration-expr)  [statement  statement-block] 
 using(StreamReader s =    new StreamReader("README.TXT"))  {    // ... }  // s is disposed here 

Variable declaration

   
 
 type [   variable   [ =   expr   ]?]+ ; 
 long a, b, c; int x = 100; 

While loops

   
 
 while (   Boolean-expr   )   [statement  statement-block]   
 int i = 0; while(i < 10) {  // print 0 through 9    Console.WriteLine(i++); } 


C# in a Nutshell
C # in a Nutshell, Second Edition
ISBN: 0596005261
EAN: 2147483647
Year: 2005
Pages: 963

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net