Description:  This document is the first tutorial in a series of tutorials for programmers learning about the .NET Framework development environment.  What you will learn is what the .NET Framework is and how it relates to other technologies such as C# (C-Sharp) and Windows.  You will also learn how to write a simple C# program as well as gain a taste for the possibilities of this new platform.

Requirements:  You should be familiar with at least one programming language, such as C++, Pascal, PERL, Java or Visual Basic.  You should be comfortable with general computer science concepts.  To do the exercises and run the examples you need a PC running Windows with the .NET Framework installed.

Table of Contents

Table of Contents. 1

Figures and Exercises. 2

1      Introducing the .NET Framework with C#. 3

1.1       Code in a Highly Distributed World. 3

1.2       C#:  A First Taste of Managed Code. 5

2      Managed Code and the CLR.. 7

2.1       Intermediate Language, Metadata and JIT Compilation. 8

2.2       Automatic Memory Management 10

2.3       Language Concepts and the CLR.. 11

2.4       Advanced Topics for the Interested. 12

3      Visual Studio .NET. 14

4      Reusable Components and the FCL. 15

4.1       Object Oriented Code Reuse. 15

4.2       The Framework Class Library. 17

4.3       Using the FCL. 19

4.4       The .NET Framework SDK Documentation. 19

4.5       Using FCL Documentation for Types. 20

5      Using the .NET Framework. 23

5.1       The .NET Framework: Big Picture. 24

5.2       .NET Application Scenarios. 25

5.3       Draw.aspx Web Applications. 27


Figures and Exercises

Figure 1‑1  Internet Distributed Software. 4

Figure 1‑2  HelloConsole.cs. 5

Figure 1‑3  HelloGUI.cs. 5

Figure 2‑1  Managed Code and the CLR.. 7

Figure 2‑2  From Source Code to Managed Executable. 9

Figure 2‑3  From IL to Execution. 10

Figure 2‑4  Managed Objects in the Managed Heap. 14

Figure 4‑1  FileToFile.cs. 17

Figure 4‑2  FileToBase64.cs. 18

Figure 4‑3  Sample SDK Reference Topic. 21

Figure 5‑1  The .NET Framework in Context 24

Figure 5‑2  Managed Code in an Internet-Distributed World. 26

Exercise 1‑1  Compile Sample Code. 6

Exercise 1‑2  Compile GUI Sample Code. 6

Exercise 1‑3  EXTRA CREDIT:  Modify the GUI Application. 6

Exercise 4‑1  Compile and Test Sample Code. 23

Exercise 4‑2  Create Base64toFile.cs. 23

 


 

 

1      Introducing the .NET Framework with C#

The .NET Framework is such a comprehensive platform that it can be a little difficult to describe.  I have heard it described as a Development Platform, an Execution Environment, and an Operating System among other things.  In fact, in some ways each of these descriptions is accurate, if not sufficiently precise.

The software industry has become much more complex since the introduction of the Internet.  Users have become both more sophisticated and less sophisticated at the same time.  (I suspect not many individual users have undergone both metamorphoses but as a body of users this has certainly happened).  Folks who had never touched a computer less than five years ago are now comfortably including the Internet in their daily lives.  Meanwhile, the technophile or professional computer user has become much more advanced, as have their expectations from software.

It is this collective expectation from software that drives our industry.  Each time a software developer creates a successful new idea, they raise user expectations for the next new feature.  In a way this has been true for years.  But now software developers face the added challenge of addressing the Internet and Internet-users in many applications that in the past were largely unconnected.  It is this new challenge that the .NET Framework directly addresses.

1.1         Code in a Highly Distributed World

Software that addresses the Internet must be able to communicate.  However, the Internet is not just about communication.  This assumption has led the software industry down the wrong path in the past.  Communication is simply the base requirement for software in an Inter-networked world.

In addition to communication other features must be established.  These include, security, binary composeability and modularity (which I will discuss shortly), scalability and performance, and flexibility.  Even these just scratch the surface, but they are a good start.

Here are some features that users will expect in the near future.  Users will begin to expect to run code served by a server that is not limited to the abilities (or physical display window) of a browser.  Users will begin to expect websites and server-side code to begin to compose themselves of data and functionality from various venders, giving the end-user flexible one-stop shopping.  Users will expect their data and information to be both secured and to roam from site to site so that they don’t have to type it in over and again.  These are tall orders, and these are the types of requirements that are addressed by the .NET Framework.

It is not possible for the requirements of the future to be addressed by a new programming language, or a new library of tools and reusable code.  It is also not practical to require everyone to buy a new operating system to use that addresses the Internet directly.  This is why the .NET Framework is a development environment, execution environment and Operating System. 

One challenge for software in a highly distributed environment (like the Internet) is the fact that many components are involved, with different needs in terms of technology.  For example, client software such as a browser or custom client has different needs then a server object or data-base element.  Developers creating large systems often have to learn a variety of programming environments and languages just to create a single product.

Figure 11  Internet Distributed Software

Take a look at Figure 11.  This depicts a typical arrangement of computers and software in a distributed application.  This includes client/server communication on several tiers as well as peer-to-peer communication.  In the past the tools that you used to develop code at each tier would likely be different, including different programming languages and code libraries. 

The .NET Framework can be used to develop software logic at every point from one end to the other.  This way you get to use the language and programming tools that you are comfortable with for each stage of the development process.  Additionally, the .NET framework uses standards so that it is not necessary that each piece of the puzzle be implemented using the framework.  These are the goals of the .NET Framework.

I will describe what all this means in detail shortly.

1.2         C#:  A First Taste of Managed Code

Software that is written using the .NET Framework is called Managed Code.  (Legacy or traditional software is sometimes referred to as Unmanaged Code).  I will define managed code later in this tutorial.  But for now you should think of managed code as code that runs with the aid of an execution engine to promote the goals of Internet software.  These goals include security, robustness, and object-oriented design, amongst others.  Managed code is not interpreted, and does run in the native machine language of the host processor, but I am getting ahead of myself.

First things first, I would like to show a couple of examples of managed code written using the C# (pronounced see-sharp) language.

class App{

   public static void Main(){

      System.Console.WriteLine("Hello World!");

   }

}

Figure 12  HelloConsole.cs

This short application is written using the C# language.  The C# language is just one of the many languages that can be used to write managed code.  This source code generates a program that displays the string “Hello World!” to the command line and then exits. 

using System.Windows.Forms;

using System.Drawing;

 

class MyForm:Form{

   public static void Main(){

      Application.Run(new MyForm());

   }

  

   protected override void OnPaint(PaintEventArgs e){

      e.Graphics.DrawString("Hello World!", new Font("Arial", 35),

         Brushes.Blue, 10, 100);

   }

}

Figure 13  HelloGUI.cs

This slightly longer source sample is the GUI or windowed version of the Hello World! application.  It takes advantage of a few more of the features of the .NET Framework to create a window in which to draw the message string.

Both Figure 12 and Figure 13 are examples of complete C# applications.  One of the goals of the .NET Framework is to increase developer productivity and flexibility.  One important way to do this is to make software easier to write.

As you can see, the syntax of C# is an object oriented C-based syntax much like C++ or Java.  This allows developers to build on previous experience when targeting the .NET Framework with their software.

Before moving on I would like to point out some very simple details to jumpstart your exposure to C#.  First, C# source code is typically maintained in files with a .cs extension.  Note that both Figure 12 and Figure 13 are labeled with .cs names indicating that they are complete, compileable C# modules.

Second, if you are writing an executable your application must define an entry point function.  (Modules containing nothing but reusable components do not require an entry point, but can not be executed as stand-alone applications).  With C# the entry point, if there is one, is always a static method named Main().

The Main() function can accept an array of strings as command line arguments, and it can also return an integer value.  The class in which the Main() method is defined can be of any name.  It is common to name this class App, but as you can see from Figure 13, it is also ok to use another class name such as MyForm.  When reading C# source code, look to the Main() method as a starting point.

Exercise 11  Compile Sample Code

  1. The source code in Figure 1‑2  is a complete C# application.
  2. Type in the code or copy it from the source code distributed with this tutorial.  Save it into a file with the .cs extension.
  3. Use either Visual Studio .NET or the command line compiler (named CSC.exe) to compile the application into an executable.
    1. Hint:  If you are using the command line compiler, the following line would compile a single module into an executable.
      csc /target:exe HelloConsole.cs
    2. Hint:  If you are using the Visual Studio IDE then you should create an empty C# project, and add your .cs file to the project.  Then build it to compile the exe.
  4. Run the executable.
  5. Try modifying the source code a little to change the text of the string, or perhaps to print several lines to the console window.

Exercise 12  Compile GUI Sample Code

  1. The source code in Figure 1‑3 is a complete GUI application written in C#.  It will display a window with some text on the Window.
  2. Like you did in Exercise 1‑1 type in or copy the source code and save it in a .cs file.
  3. Compile the source code using the command line compiler or the Visual Studio IDE.
    1. Hint:  If you are using Visual Studio you will nee