
- •Contents
- •What Is C#?
- •C# Versus Other Programming Languages
- •Preparing to Program
- •The Program Development Cycle
- •Your First C# Program
- •Types of C# Programs
- •Summary
- •Workshop
- •C# Applications
- •Basic Parts of a C# Application
- •Structure of a C# Application
- •Analysis of Listing 2.1
- •Object-Oriented Programming (OOP)
- •Displaying Basic Information
- •Summary
- •Workshop
- •Variables
- •Using Variables
- •Understanding Your Computer’s Memory
- •C# Data Types
- •Numeric Variable Types
- •Literals Versus Variables
- •Constants
- •Reference Types
- •Summary
- •Workshop
- •Types of Operators
- •Punctuators
- •The Basic Assignment Operator
- •Mathematical/Arithmetic Operators
- •Relational Operators
- •Logical Bitwise Operators
- •Type Operators
- •The sizeof Operator
- •The Conditional Operator
- •Understanding Operator Precedence
- •Converting Data Types
- •Understanding Operator Promotion
- •For Those Brave Enough
- •Summary
- •Workshop
- •Controlling Program Flow
- •Using Selection Statements
- •Using Iteration Statements
- •Using goto
- •Nesting Flow
- •Summary
- •Workshop
- •Introduction
- •Abstraction and Encapsulation
- •An Interactive Hello World! Program
- •Basic Elements of Hello.cs
- •A Few Fundamental Observations
- •Summary
- •Review Questions
- •Programming Exercises
- •Introduction
- •Essential Elements of SimpleCalculator.cs
- •A Closer Look at SimpleCalculator.cs
- •Simplifying Your Code with Methods
- •Summary
- •Review Questions
- •Programming Exercises
- •Introduction
- •Lexical Structure
- •Some Thoughts on Elevator Simulations
- •Concepts, Goals and Solutions in an Elevator Simulation Program: Collecting Valuable Statistics for Evaluating an Elevator System
- •A Deeper Analysis of SimpleElevatorSimulation.cs
- •Class Relationships and UML
- •Summary
- •Review Questions
- •Programming Exercises
- •The Hello Windows Forms Application
- •Creating and Using an Event Handler
- •Defining the Border Style of the Form
- •Adding a Menu
- •Adding a Menu Shortcut
- •Handling Events from Menus
- •Dialogs
- •Creating Dialogs
- •Using Controls
- •Data Binding Strategies
- •Data Binding Sources
- •Simple Binding
- •Simple Binding to a DataSet
- •Complex Binding of Controls to Data
- •Binding Controls to Databases Using ADO.NET
- •Creating a Database Viewer with Visual Studio and ADO.NET
- •Resources in .NET
- •Localization Nuts and Bolts
- •.NET Resource Management Classes
- •Creating Text Resources
- •Using Visual Studio.NET for Internationalization
- •Image Resources
- •Using Image Lists
- •Programmatic Access to Resources
- •Reading and Writing RESX XML Files
- •The Basic Principles of GDI+
- •The Graphics Object
- •Graphics Coordinates
- •Drawing Lines and Simple Shapes
- •Using Gradient Pens and Brushes
- •Textured Pens and Brushes
- •Tidying up Your Lines with Endcaps
- •Curves and Paths
- •The GraphicsPath Object
- •Clipping with Paths and Regions
- •Transformations
- •Alpha Blending
- •Alpha Blending of Images
- •Other Color Space Manipulations
- •Using the Properties and Property Attributes
- •Demonstration Application: FormPaint.exe
- •Why Use Web Services?
- •Implementing Your First Web Service
- •Testing the Web Service
- •Implementing the Web Service Client
- •Understanding How Web Services Work
- •Summary
- •Workshop
- •How Do Web References Work?
- •What Is UDDI?
- •Summary
- •Workshop
- •Passing Parameters and Web Services
- •Accessing Data with Web Services
- •Summary
- •Workshop
- •Managing State in Web Services
- •Dealing with Slow Services
- •Workshop
- •Creating New Threads
- •Synchronization
- •Summary
- •The String Class
- •The StringBuilder Class
- •String Formatting
- •Regular Expressions
- •Summary
- •Discovering Program Information
- •Dynamically Activating Code
- •Reflection.Emit
- •Summary
- •Simple Debugging
- •Conditional Debugging
- •Runtime Tracing
- •Making Assertions
- •Summary

Understanding C# Programs |
39 |
Caution |
The case of your code—whether letters are capitalized—is critical in C# |
|
applications. Main() has only the M capitalized. C++ and C programmers |
||
|
||
|
need to be aware that main()—in lowercase—does not work for C#. |
|
|
|
|
Lines 14, 15, and 16—Declarations |
Lines 14, 15, and 16 contain statements used to create identifiers that will store informa- |
2 |
tion. These identifiers are used later to do calculations. Line 14 declares an identifier to |
|
store the value of a radius. The literal 4 is assigned to this identifier. Line 15 creates an |
|
identifier to store the value of PI. This identifier, PI, is filled with the literal value of |
|
3.14159. Line 16 declares an identifier that is not given any value. |
|
Line 20—The Assignment Statement |
|
Line 20 contains a simple statement that multiplies the identifier PI by the radius twice. |
|
The result of this expression is then assigned to the identifier area. |
|
Lines 24 and 25—Calling Functions |
|
Lines 24 and 25 are the most complex expressions in this listing. These two lines call a |
|
predefined routine that prints information to the console (screen). You will learn about |
|
these predefined functions later in today’s lesson. |
|
Object-Oriented Programming (OOP)
As mentioned earlier, C# is considered an object-oriented language. To take full advantage of C#, you should understand the concepts of object-oriented languages. The following sections present an overview about objects and what makes a language object-oriented. You will learn how these concepts are applied to C# as you work through the rest of this book.
Object-Oriented Concepts
What makes a language object-oriented? The most obvious answer is that the language uses objects! This, however, doesn’t tell you much. Recall from Day 1 that there are three concepts generally associated with object-oriented languages:
• Encapsulation
• Polymorphism
• Inheritance

40 |
Day 2 |
There is a fourth concept that is expected as a result of using an object-oriented language: reuse.
Encapsulation
Encapsulation is the concept of making “packages” that contain everything you need. With object-oriented programming, this means that you could create an object (or package) such as a circle that would do everything that you would want to do with a circle. This includes keeping track of everything about the circle, such as the radius and center point. It also means knowing how to do the functionality of a circle, such as calculating its radius and possibly knowing how to draw it.
By encapsulating a circle, you allow the user to be oblivious to how the circle works. You only need to know how to interact with the circle. This provides a shield to the inner workings of the circle. Why should users care how information about a circle is stored internally? As long as they can get the circle to do what they want, they shouldn’t.
Polymorphism
Polymorphism is the capability of assuming many forms. This can be applied to two areas of object-oriented programming (if not more). First, it means you can call an object or a routine in many different ways and still get the same result. Using a circle as an example, you might want to call a circle object to get its area. You can do this by using three points or by using a single point and the radius. Either way, you would expect to get the same results. In a procedure language such as C, you need two routines with two different names to address these two methods of getting the area. In C#, you still have two routines; however, you can give them the same name. Any programs you or others write will simply call the circle routine and pass your information. The circle program automatically determines which of the two routines to use. Based on the information passed, the correct routine will be used. Users calling the routine don’t need to worry about which routine to use. They just call the routine.
Polymorphism is also the ability to work with multiple forms. You will learn more about this form of polymorphism on Day 11, “Inheritance.”
Inheritance
Inheritance is the most complicated of the object-oriented concepts. Having a circle is nice, but what if a sphere would be nicer? A sphere is just a special kind of circle. It has all the characteristics of a circle with a third dimension added. You could say that a sphere is a special kind of circle that takes on all the properties of a circle and then adds a little more. By using the circle to create your sphere, your sphere can inherit all the properties of the circle. The capability of inheriting these properties is a characteristic of inheritance.

Understanding C# Programs |
41 |
Reuse
One of the key reasons an object-oriented language is used is the concept of reuse. When you create a class, you can reuse it to create lots of objects. By using inheritance and some of the features described previously, you can create routines that can be used again in a number of programs and in a number of ways. By encapsulating functionality, you can create routines that have been tested and proven to work. This means you won’t have
to test the details of how the functionality works, only that you are using it correctly. 2 This makes reusing these routines quick and easy.
Objects and Classes
Now that you understand the concepts of an object-oriented language, it is important to understand the difference between a class and an object. A class is a
definition for an item that will be created. The actual item that will be created is an object. Simply put, classes are definitions used to create objects.
An analogy often used to describe classes is a cookie cutter. A cookie cutter defines a cookie shape. It isn’t a cookie, and it isn’t edible. It is simply a construct that can be used to create shaped cookies over and over. When you use the cookie cutter to create cookies, you know that each cookie is going to look the same. You also know that you can use the cookie cutter to create lots and lots of cookies.
As with a cookie cutter, a class can be used to create lots of objects. For example, you can have a circle class that can be used to create a number of circles. If you create a drawing program to draw circles, you could have one circle class and lots of circle objects. You could make each circle in the snowman an object; however, you would need only one class to define all of them.
You also can have a number of other classes, including a name class, a card class, an application class, a point class, a circle class, an address class, a snowman class (that can use the circle class), and more.
Note
Classes and objects are covered again in more detail starting on Day 6. Today’s information gives you an overview of the object-oriented concepts.
Displaying Basic Information
To help you have a little more fun early in this book, let’s look at two routines that you can use to display information. When you understand these two routines, you will be able to display some basic information.

42 |
Day 2 |
The two routines that you will be seeing used throughout this book to display basic information are
•System.Console.WriteLine()
•System.Console.Write()
These routines print information to the screen. Both print information in the same manner, with only one small difference. The WriteLine() routine writes information to a new line. The Write() routine does not start a new line when information is written.
The information you are going to display on the screen is written between the parentheses. If you are printing text, you include the text between the parentheses and within double quotes. For example, the following prints the text “Hello World”:
System.Console.WriteLine(“Hello World”);
Note |
You used this routine on Day 1. |
|
This prints Hello World on the screen. The following examples illustrate other text being printed:
System.Console.WriteLine(“This is a line of text”);
System.Console.WriteLine(“This is a second line of text”);
If you execute these consecutively, you see the following displayed:
This is a line of text
This is a second line of text
Now consider the following two lines. If these execute consecutively, what do you see printed?
System.Console.WriteLine(“Hello “);
System.Console.WriteLine(“World!”);
If you guessed that these would print
Hello World!
you are not correct! Those lines print the following:
Hello
World!

Understanding C# Programs |
43 |
Notice that each word is on a separate line. If you execute the two lines using the Write() routine instead, you get the results you want:
Hello World!
As you can see, the difference between the two routines is that WriteLine() automatically goes to a new line after he text is displayed, whereas Write() does not. Listing 2.3 shows
the two routines in action.
2
LISTING 2.3 display.cs—Using WriteLine() and Write().
1:// display.cs - printing with WriteLine and Write
2://-----------------------------------------------
4:class display
5:{
6:public static void Main()
7:{
8:System.Console.WriteLine(“First WriteLine Line”);
9:System.Console.WriteLine(“Second WriteLine Line”);
11:System.Console.Write(“First Write Line”);
12:System.Console.Write(“Second Write Line”);
14:// Passing parameters
15:System.Console.WriteLine(“\nWriteLine: Parameter = {0}”, 123 );
17:System.Console.Write(“Write: Parameter = {0}”, 456);
18:}
19:}
Remember that to compile this listing from the command line, you enter the following:
csc display.cs
If you are using an integrated development tool, you can select the compile option.
First WriteLine Line
Second WriteLine Line
First Write LineSecond Write Line
WriteLine: Parameter = 123
Write: Parameter = 456
This listing uses the System.Console.WriteLine() routine on lines 8 and 9 to print two pieces of text. You can see from the output that each of these print on a
separate line. Lines 11 and 12 show the System.Console.Write()routine. These two lines print on the same line. There is not a return line feed after printing. Lines 15 and 17 show each of these routines with the use of a parameter.

44 |
Day 2 |
Printing Additional Information
In addition to printing text between quotation marks, you can also pass values to be printed within the text. Consider the following example:
System.Console.WriteLine(“The following is a number: {0}”, 456);
This prints
The following is a number: 456
As you can see, the {0} gets replaced with the value that follows the quoted text. The format is
System.Console.WriteLine(“Text”, value);
where Text is almost any text you want to display. The {0} is a placeholder for a value. The braces indicate that this is a placeholder. The 0 is an indicator for using the first item following the quotation marks. A comma separates the text from the value to be placed in the placeholder.
You can have more than one placeholder in a printout. Each placeholder is given the next sequential number. To print two values, use the following:
System.Console.Write(“Value 1 is {0} and value 2 is {1}”, 123, “Brad”);
This prints
Value 1 is 123 and value 2 is Brad
You will learn more about using these routines throughout this book.
Caution |
The first placeholder is numbered 0 and not 1. |
|
Note
You can also see some weird text in line 15 of Listing 2.3. The \n on this line is not a mistake. This is an indicator that a newline should be started before printing the information that follows. You will learn more about this on Day 3, “Storing Information with Variables.”