C# Workshop - Week 1 (Ch. 1 - 4) - Beginners

Started by
91 comments, last by CalebGorde 12 years, 8 months ago

Welcome to the GDNet C# Workshop – .NET Book Zero Ch. 1 - 4

For a complete introduction to this workshop, please look here. Workshop Overview This workshop is designed to aid people in their journey to learn beginning C# (C-Sharp). This workshop is targeted at highly motivated individuals who are interested in learning C# or who have attempted to learn C# in the past, but found that without sufficient support and mentoring they were unable to connect all the pieces of this highly complex but powerful programming language. This is a 'guided' self-teaching C# workshop. Each student is responsible for taking the time to read the material and learn the information. Additionally, this workshop does not attempt to defend C# as a language, nor does it attempt to demonstrate that C# is either more or less useful then other programming languages for any particular purpose. People who intend to start a discussion about the differences between C# and ANY other languages (except as are relevant to a particular discussion), are encouraged to do so elsewhere. This workshop is for educational, not philosophical discussions. Finally, the community and tutors that arise out of this workshop are here for making the learning process run more smoothly, but are not obligated to baby-sit a person's progress. Because everyone will be working from the same references (.NET Book Zero and optionally the C# Language Specification 1.2 & 2.0), students may find it easier to get answers to the specific questions they might have. There is no minimum age requirement, and there is no previous programming experience required. However, we will be moving quickly so it's essential that students stay on task and dont fall behind. Experienced C# Programmers Feel free to post your own additional knowledge about the topics, however please try and keep the information you provide objective. If you MUST provide subjective/opinion-based information, please do so by marking the paragraph with [opinion] tags. This will make it clear to the readers what is fact, and what is opinion. Also, it may be relevant to mark some information with [observation] tags for information which you’ve “observed” but may not be fact. Finally, if you’re providing information which is related to common programming errors, you might tag it with a [warning] tag. Also, feel free to post links to additional resources about the topics for this week. I will do my best to add those to the “Additional Resources” section at the bottom of this post. Quizzes & Exercises Each week I will post review questions and exercises in the weekly thread. Please try and answer them by yourself. Once you've done so, feel free to look over the answers provided by others and submit your own answers if you've not yet seen them posted yet. Discussion about the quiz questions and answers is encouraged for clarification. Finally, experienced C# programmers may feel free to post quiz-like questions and exercises of their own. Additional Resources A good general overview of C# is located at the following URL, with decent descriptions and plenty of code samples. I highly encourage all complete programming beginners to check it out. http://www.publicjoe.f9.co.uk/csharp1/csharp03.html

Good Luck!

[Edited by - JWalsh on July 23, 2007 9:42:27 PM]
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
Advertisement
Chapter 1 & 2 Review Questions

Greetings everyone. Each week I will post review questions and exercises in the weekly thread. Please try and answer them by yourself; either as you're reading over the chapters, or afterwards if you prefer.

Once you've done so, feel free to look over the answers provided by others and submit your own answers if you've not yet seen them posted. Discussion about the quiz questions and answers is encouraged for clarification. Finally, experienced C# programmers may feel free to post quiz-like questions and exercises of their own.
  1. What is component-oriented programming?
  2. What are the keys to software components in C#?
  3. What is Garbage Collection?
  4. What is exception Handling?
  5. What benefits do type safety provide you in C#?
  6. What is a unified type system?
  7. What are the benefits of a unified type system?
  8. What's the purpose of namespaces?
  9. What directive allows unqualified use of the members of a namespace?
  10. What is the entry point of a C# Console application?
  11. What's the name of the C# Runtime libraries?
  12. What are the key organizational concepts in C#?
  13. What two things do C# assemblies contain and what form are they in?
  14. What happens to the IL instructions just before the code is executed?
  15. When are forward declerations needed in C#?
  16. What are the two kinds of variable types in C# what's the difference?
  17. How are C#'s value types subdivided?
  18. How are C#'s reference types subdivided?
  19. What is the encoding of a C# character, and how much memory does a single character require?
  20. What are the sizes of each of the Simple Types, and their range of values?
  21. Which 5 categories of C# types are user-definable types?
  22. Give an overview of each of the 5 types.
  23. What is "boxing" and "unboxing"
  24. What are expressions?
  25. What is the relationship between operators and operands in an expression?
  26. What is an operator's precedence?
  27. What is operator overloading?
  28. What are the different kinds of C# statements, and what do they do??
  29. What is a class?
  30. Create an example class named Character. Dont worry about members, methods, or properties
  31. What operator is used to create a new instance of a class? What's the syntax to create a Character object?
  32. What are the different types of members of a class?
  33. What are the 5 types of Accessibility used on a class's members?
  34. What does inheritance mean?
  35. What is a field?
  36. What is the difference between a static and non-static field?
  37. What is a method of a class?
  38. What's the difference between static and non-static methods?
  39. What are parameters?
  40. What are return types?
  41. What does a signature of a method consist of?
  42. What are the 4 types of parameters and how are they used?
  43. What is a static method?
  44. What is an instance method?
  45. What's the difference between a virtual and non-virtual method?
  46. What does it mean to override a virtual method?
  47. What is an abstract method and when is it permitted?
  48. What is method overloading?
  49. What is the difference between an instance constructor and a static constructor?
  50. What is the primary difference between properties and fields?
  51. How do you make a property read-only?
  52. What is an indexer?
  53. What is an event, and what is true of it's type?
  54. What are event handlers?
  55. What is a class operator?
  56. What is a destructor?
  57. What's the main difference between classes and structs?
  58. What is an array?
  59. What is an array initializer?
  60. What is an interface, and what can it contain?
  61. What are enums?
  62. What is an enum's underlying type?
  63. What is a delegate?
  64. What is the purpose of attributes?
  65. What is a compilation unit in C#?
  66. What are the 3 steps in compiling a program?
  67. What encoding are C# files in? ie. ASCII?
  68. What is the purpose of lexical grammar?
  69. What is the purpose of syntactic grammar?
  70. What is contained within the first line of a grammar rule?
  71. When you see the suffix "opt" in a grammar rule, what does it mean?
  72. What are the five basic elements that make up the structure of a C# source file?
  73. Which of the 5 elements of a C# source file are relevant to the syntax of a C# file?
  74. What do line terminators do?
  75. What are the two forms of comments supported by C#, give examples.
  76. What are the 5 types of tokens?
  77. List ALL of the C# keywords
  78. What is a literal, and what are the 6 types of literals?
  79. Give an example of each type of literal.
  80. What is a verbatim literal string, and how is it created?
  81. What are the possible Pre-processing directive, what is their function, and what is their intended use?
Chapter 1 & 2 Exercises

As this week is largely an overview of the entire language and doesnt go into significant enough detail to warrent a large number of exercises, we'll keep it simple for this week. Next week, however...[wink]

1. Write a program which outputs your name to the console.
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
Week 1 Overview

Before I begin, let me tell you a bit about why I decided to use the C# Specification for the C# Workshop, some of the observed problems we're having so far, and how I plan to solve those problems.

First, I decided to use the C# Specification as the official documentation for the C# Workshop because it was both free, complete, and designed for intermediate to advanced programmers. You see, during the C++ Workshop we used a very rudimentary text designed for the complete beginner, and we also moved very slowly. The end result was that people got bored of the workshop, and eventually decided to quit. I wanted to avoid repeating a similar mistake, so instead I created a brand new one. In an attempt to accelerate the workshop to make it more interesting, and to make sure we were all able to use a freely available text, I chose the C# Specification. Unfortunately, I did so without considering how the participants of the C# workshop might be different from those of the C++ Workshop.

First, there's been a much larger interest in the C# Workshop than the C++ Workshop. This has guaranteed it's exposure to a larger audience of people. As well, unlike with C++ where many people were already experienced programmers, there's probably only a dozen or so very experienced C# programmers here on GDNet actively participating in the workshop (out of roughly 400 participants). And finally, C#, unlike C++ is advertised as a very user-friendly and easy to learn language. This has caused far more beginning programmers to join the C# workshop than joined the C++ workshop. What's the end result? The end result is that the C# specification isn't suitable as a beginning learning device, and consequently, not the best suited text for this workshop's audience.

Ok, so we're now working with a text which, although is a good, complete resource - may not be the best resource for the workshop. How do we fix it? Simple. With supplementary text. In specific, I will speak to those people who've volunteered as tutors and either myself or one of them will write an overview for each weekly thread which contains a more tutorial style introduction to the material. The overviews will not go into nearly as much depth as that covered in the specification, but it will provide more examples and it will present some of the most important information in a more human-readable format. I will be writing a partial overview below to give people an idea of what these overviews might be like. Please provide your feedback. If there's not enough interest or usefulness in writing such an overview for each weekly thread, please say so, as it's a time-consuming endeavor on top of an already time-consuming endeavor, and we dont want to burden either myself or the other tutors needlessly if the information and style presented here isn't useful to those beginning C#.

The text assigned to week 1 is chapters 1 and 2. The first chapter serves as an overview of the entire language, giving you just enough information to make you familiar with the terms and concepts of the C# language. Unfortunately, they dont give a slew of examples, nor do they frequently explain the how or the why of something. I dont want to make chapter 1 responsible for scaring people off, suggesting they need to learn the entire language within the first week, however people have already begun reading and are now becoming overwhelmed. At this point, the cat is out of the bag. The only way to move forward as I can see it, is to explain each of those topics a bit further, so they at least make enough sense that people can move forward without feeling like they were left in a deserted field and cluster-f&*!#d. But again, keep in mind that we will go into each topic in more details, one at a time, in the coming weeks. For now, you should just be familiar with the terminology and basic syntax presented here. Ok, let's get it started...

Hello World

It's customary when demonstrating a new language to use the "Hello World" example. Since I'm a fan of tradition, I'll do the same. I'll present the code first, and then explain it in more detail afterwards.
1: class HelloWorldProgram2: {3:     static void Main()4:     {5:         System.Console.WriteLine("Hello World");6:     }7: }  

The above is a very simple example of a completely functional C# application. When compiled it create an executable assembly which, when executed, outputs "Hello World" (without quotes) to the console window. You should enter the above, without the line numbers, into your C# compiler, build and execute the above to see it in action.

Line 1 of the source code is what is called a class declaration. In C# all data and operations exist within a class, and there must be at least 1 class in any C# application. "But what is a class?" For now, just know that a class is a container for all data and operations within an application or library. We'll get into more detail about what a class is and how it's used in a few moments.

Lines 2 and 7 indicate the extents of the class declaration. Everything between the open '{' and close '}' brackets are considered part of the class. All functions, fields, events, delegates, etc...contained between the { and } are called Members of the class.

In this case, we've created a class called "HelloWorldProgram", and we've given it a single method (aka member function) called "Main". On line 3 you can see the declaration for the method called main. You'll also notice that there are two other words in that line - static and void.

Static is a keyword, which in this context, is used to indicate that the method Main is part of HelloWorldProgram, as a class, and does not require an instance of HelloWorldProgram as an Object. The difference between classes and objects will be explained later. For now, just recognize that all C# console programs must have a method called Main, and it must be declared static.

The second thing you'll see on that line is the type name "void". Void is actually a type used to indicate no type at all. Normally, a type name preceding a method name indicates what kind of value is returned from a method. When void is specified, it means the method doesn't return a value. In C#, the return value for main can either be 'int' or 'void'. If int is specified the programmer is responsible for returning a value. If void is specified, the programmer CANNOT return a value, and the value 0 is returned automagically.

On line 5 you see the real meat of the application. Up until this point, everything we've seen so far will exist in every C# console application you ever make. In fact, you could take out line 5, and just save everything else as a template application if you wanted to. (Note, you dont have to, Visual C# 2005 EE does that for you. Whenever you create a new console application, the class and Main are provided for you). On line 5 we have the line:
        System.Console.WriteLine("Hello World");

The above code may at first appear confusing, but when we break it down into sections, it makes much more sense. The first part is "System". Whenever a programmer writes instructions for a computer, they do so using variables which they create. These variables all have types, and every type has a name called its...wait for it...type name. To make sure the name of their types do not collide with other peoples types, they are grouped into namespaces. Think of it this way...lets say my name is Adam. At my university there may have been hundreds of Adams. How would someone know who I am by name from someone else with the same name? Simple, by also using my last name. If you were to say "Adam Smith", then people would immediately know you didn't mean "Adam Johnson". In other words, the last name of the individual helps to qualify WHICH individual is being referred to. Namespaces are the exact same thing. By grouping types into namespaces, we are in essence giving them a last name. And whenever there is confusion about which type to use with a similar name, a programmer can fully qualify it by identifying the namespace.

In the example above, we are wanting to reference the 'Console' class. But in order to do so I must instruct the compiler WHICH console I want to use. In this case, I have fully qualified which Console I want to use by also including its namespace, ie. System. There are alternative ways to indicate which namespace a type belongs to, but for the sake of this introduction I'll leave it at that.

The next part of the instruction above is "WriteLine". An identifier followed by ( followed by some optional information followed by ) is what's referred to as a method in C#. Using a method in that format invokes that method, causing it to execute code. In this case I'm invoking the WriteLine method of the Console class, in the System namespace. I'm also passing the method the parameter "Hello World". This, in whole, prints whatever I pass into WriteLine out to the console window.

Types & Variables

Now that we've taken a look at a basic C# application, lets make it a little more interesting. Lets start by adding some variables using the simple types that the C# language understands.

1:  class CharacterNameProgram2:  {3:     static void Main()4:     {5:         Character myCharacter = new Character();6:         myCharacter.name = "Jeromy Walsh";7: 8:         System.Console.WriteLine(myCharacter.name);9:     }10: }11: 12: class Character13: {14:     public System.String name;14: }

In the above example I've created a new class type called Character beginning on line 12. Character has one Field (variable) which is called name. Name is of type String. This is how you'd declare a publicly accessible field in C#. On line 5 of the Main method I create a new instance of myCharacter. On line 6 I assign the value "Jeromy Walsh" to my character's name. On line 8 I print the name of my character out to the console.

The above is just something to demonstrate how someone might use one of the simple data types. Among the other simple data types are int, byte, char, float, bool, and decimal. There are also enums and structs, but we'll talk more about that later. Lets expand the above to include some additional fields, which describe my Character class.

1:  class CharacterInfoProgram2:  {3:     static void Main()4:     {5:         Character myCharacter = new Character();6:         myCharacter.name = "Jeromy Walsh";7:         myCharacter.age = 27;	8:         myCharacter.weight = 165;9:         myCharacter.middleInitial = 'L';10:		   11:        System.Console.WriteLine(myCharacter.name);12:     }13: }14: 15: class Character16: {17:     public System.String name;18:	public byte age;19:	public int weight;20:	public char middleInitial;21: }

Each of the above fields use a different simple type, and each one accepts different types of values with different ranges. There is a complete table in your text which shows what types of data can go in each type, and what the possible ranges of values are.

Expressions

The next section of this overview deals with expressions. As indicated in your text, an expression can really be anything that returns a value, including allocation of new objects, comparisons, or even method invocations. But the thing people think of most when talking about expressions are mathematical expressions. That is, statements in the form 'x = m * a + b'. So I've created a quick example showing a practical set of expressions.

1:  class CharacterFightProgram2:  {3:      static void Main()4:      {5:          Character rand = new Character();6:          rand.Name = "Rand";7:          rand.Level = 5;8:          rand.HitPoints = 50;9:          rand.Strength = 5;10:         rand.Armor = 5;11:  12:         Character Semirhage = new Character();13:         Semirhage.Name = "Semirhage";14:         Semirhage.Level = 4;15:         Semirhage.HitPoints = 40;16:         Semirhage.Strength = 4;17:         Semirhage.Armor = 4;18:  19:         rand.Attack(Semirhage);20:         System.Console.WriteLine("{0}'s hitpoint are now {1}.", Semirhage.Name, Semirhage.HitPoints);21:  	}22:  }23:  24:  class Character25:  {26:      public void Attack(Character enemy)27:      {28:          int damage = 0;29:          damage = Level + Strength;30:  31:          int resistance = 0;32:          resistance = enemy.Level + enemy.Armor;33:  34:          int totalDamage = damage - resistance;35:         36:          if (totalDamage <= 0) 37:            totalDamage = 1;38:  39:          enemy.HitPoints -= totalDamage;40:      }41:  42:      public int HitPoints43:      {44:          get { return m_Hitpoints; }45:          set46:          {47:              if (value < 0)  m_Hitpoints = 0;48:              else            m_Hitpoints = value;49           }50:      }51:  52:      public System.String Name;    53:      public int Level;54:      public int Strength;55:      public int Armor;56:  57:      private int m_Hitpoints;58:  }

In the program above, you can see several expressions. First, lines 6-10 and again on lines 13-17 we are creating expression statements which assign values to the public fields of type "Character". On line 19 there is method invocation expression which returns void. And finally,
the majority of expressions are happening between lines 28 and 39. Let me explain these lines in a bit more details.

Lines 28, 31, and 34 are not expressions, they are technically local variable declarations, as we're allocating memory and declaring variables via an identifier which will be used throughout the rest of the method.

Line 29 is an expression which computes this character (rand's) damage output, based on a formula of his strength plus his level.

Line 32 is an expression which computes the enemies resistance, based on his level and his armor.

Line 34 is an expression where we compute the total damage done, by subtracting the resistance from the damage possible.

Line 36 is actually an if-statement, however the if-statement contains a boolean expression "totalDamage <= 0" which returns either true or false depending on the value of totalDamage. In the example, it returns false.

And finally, line 39 is an expression which uses the -= operator. This operator can be expanded into the form:

enemy.HitPoints = enemy.HitPoints - totalDamage;

You can now see the expression simply subtracts the totalDamage from the enemy's hitpoints, and then assigns it back to her hitpoins.

In C#, and especially in game development, the majority of your statements will either be expressions, declarations, or conditionals and branching such as if, else, switch, for, and while.

If you've found the above a more human-readable format for learning beginning C#, please let me know. Note, this is again just an overview of the information in week 1. If this format receives enough interest, myself or another tutor will write similar overviews for the remaining chapters. Also, please let me know if the above is detailed enough, not detailed enough, etc...What do you want more of, what do you want less of?

This workshop is really about all of you. If you're not getting what you want, or what you expected from the workshop, please speak up so we know what level we need to cater to. If there's enough interest in this format, I'll begin by completing the information below.

Arrays // Coming soon...

Structs // Coming soon...

Enums // Coming soon...

Classes & Objects // Coming soon...

Interfaces // Coming soon...

Delegates // Coming soon...

Attributes // Coming soon...
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
I have created a new thread for week 1 specifically designed for beginners. People with little or no previous programming experience, or people who feel their question is of a more beginner nature should post their questions in this thread.

Those with a good amount of previous programming experience, or who need clarification on functionality differences between C# and C++ should post their questions in the week 1 thread marked as advanced.

These threads for week 1 will remain, and future weeks may or may not be split up in such a fashion. The GDNet staff and moderators are looking at a more long-term solution to make posting questions for Workshops easier. I'll keep you updated.

Finally, due to the general feeling that the beginners are having a hard time grasping the basic concepts, we will be extending week 1 by another week. That is, week 1 will actually be active for 2 weeks.

grasping the basic concepts, we will be extending week 1 by another week. That is, week 1 will actually be active for 2 weeks.

The beginner thread is located Here.
While the advanced thread is located Here.

Cheers!
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
I think this is a very good idea. The beginners would get quickly overwhelmed with the level of detail in the other thread.


I'm here to help as a tutor, so any questions, ask away.. I hate getting bogged down in syntax, so I'll be here in the beginner thread for a while :)

I think splitting the threads in two is a great idea. I think you writing out the code and giving descriptions on a step by step basis really works. I have been learning C# for a few months now and I find myself making silly mistakes and often over complicating things. It is nice to just go back sometimes and see a simple explanation. Also I really think repitition is the key and the more code you see and preferably write the better it is. I try to well i dont try I do write code everyday, at home and at work. It doesnt matter what it is. I write a project at work with my freind and mentor and then I come home and try to rewrite myself. I will also write projects out of a book I am reading at home and then when I get to work I will try to rewrite those projects. It may just be me but it is harder than it sounds. Dedication and Repition for me will be the key and for others I think as well.

By the way I love the RPG project and I cant wait to start getting into projects. So one thing I would like are more simple writing projects. Nothing more than 10 lines of code but just so we keep writing code so it can stick in the head more. I do this on the side on my own but the more the better.
Can you give us a summary of chapter 2 too? Cause that's the one that has me scratching my head.
What in particular in chapter 2 is confusing you? I mean, the whole thing is confusing, but to write an effective overview it would be nice to see which things need the most explaining.

Cheers!
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
Is it just me or does C++ seem a hell of a lot easier? I started learning C++ a couple months ago, and have a firm grasp on the language, but jeez, C# is confusing the hell out of me. It may be just the spec we are reading.

I'm going to reread Chapter 1 again right now and see if it helps to understand it.
Quote:Original post by Menace2Society
Can you give us a summary of chapter 2 too? Cause that's the one that has me scratching my head.


Chapter 2 is a summary of the formal grammar of the language. Essentially /* this is a comment */ in a way that is clear perhaps only to those who've a formal CS background... The individual chapters will do more explicit description hopefully, but let's see if I can't summarize it into something more comprehensible. Chapter numbers will be included.

2.1 Programs

The code for a C# program is stored in Unicode text files. Unicode if you don't know, is a text format that allows a whole ton of characters, meaning non-English characters are fair game in the source code. In the spec you might see the term Compilation Unit which is nothing more than a source file.

2.2 Grammars

Technically, your source code is first broken into chunks (tokens) before the compiler turns it into something that runs. [opinion]Something you needn't know.[/opinion]

2.2.1 Grammar Notation

This is a small intro to how formal grammars are being described by the document. Things in fixed width font are literally that text. Things in italics refer to something else.

An example (dots for spacing):
colored_animal:
........number[opt] color animal
color:
one of
........blue red white
animal: one of
........cow sheep pig
number: one of
........1 2 3 4 5 6 7 8 9

This describes the grammar element for a colored animal. It optionally takes a number (which is 1,2,3,4,5,6,7,8, or 9) followed by a color (blue red or white), followed by an animal (cow sheep or pig).

Thus "blue pig", "6 red sheep", and "9 blue cow" are all grammatically correct.

2.2.2 - 2.2.3

The chapters indicate where to find the two grammars.

2.3 Lexical Analysis

Lexical analysis is taking source code and breaking it into tokens. This means mostly tossing out whitespace, newlines, comments, and pre-processor directives (more on these later).

2.3.1 Line Terminators

A list of the official newline characters. In C# Express, there's essentially one of these at the end of every line.

2.3.2 Comments

Comments are bits of text that are not part of the code and just there for others reading your code.
C# supports C++ style /* */ (comment everything between) and // (comment the rest of the line) comments. The example on pages 34-35 is good.

2.3.3 Whitespace

Pretty much anything that is space in your editor is whitespace. Whitespace has no meaning beyond token separation in C#.

2.4 Tokens

Tokens are the meat of the program. They're what is kept, and passed along to the compiler to turn into a running program. There are different sorts of tokens:

2.4.1 Unicode escape sequences

First off, an escape sequence is something that looks like \something. They're used to represent something that isn't on most keyboards or means something to the compiler. (You use them to put a double-quote inside text [which is between double quotes] for example).

\u#### (replace with the unicode code in hex) can then be used to represent a unicode character, even if you can't type it with your keyboard.

2.4.2 Identifiers

Identifiers are labels. When you declare a variable, you give it a name. When you declare a class, you give it a name. These names are identifiers.

If I remember correctly, names are restricted to a letter or underscore followed by any number of letters, underscores, or digits.

2.4.3 Keyword

A keyword is a word which is reserved by the language, and this part of the doc has a list of them.

2.4.4 Literals

true, false, null, a character between single quotes, text between double quotes, a number... These are hard-coded values within the code. There are a few suffixes (to specify what type a number is for example) and options to use, but more often than not just typing in the number, quoted text, etc. will be sufficient.

Here is also a list of escape sequences. Once more, these are ways of representing characters which your keyboard doesn't have or would cause problems. The 'at' symbol (@) before a string disables the escape sequences within (pg. 42 for example)

2.4.5 Operators

Mathematical operations are supported in C#, and their operators are tokens specifying the various operations. These operations will be described later in the specification. The list of them is on page 43.

2.5 PreProcessing Directives

Pre-processing directives start with a pound sign (#) and do not show up often in code. Remember that anything like #if is a pre-processing directive and look it up when you encounter it.

For C/C++ users: Since C#'s pre-processor directives are dumped before tokens are ever processed, that means #define and the such cannot be used by actual code.

This topic is closed to new replies.

Advertisement