|
CIS 573
C# Syntax Reference
last updated: 08/07/2006 |
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++);
} |