Presentation is loading. Please wait.

Presentation is loading. Please wait.

Windows and Web Apps in C#

Similar presentations


Presentation on theme: "Windows and Web Apps in C#"— Presentation transcript:

1 Windows and Web Apps in C#
David Figge Session 1 Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

2 Windows and Web Apps in C#
Welcome Windows and Web Apps in C# Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

3 Advanced Language Concepts in C
This is the 2nd in a 3 part series designed to introduce you to C# programming Class 1 introduced you to the basic C# programming constructs and syntax In Class 2 we’ll investigate Windows apps, Web apps, and database connectivity. In Class 3 you’ll finish up the basic language elements, then discuss how to take what you have and turn it into a shippable product. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

4 Class 1: Introduction to C#
Introduction to .Net Basic language constructs in C# Types, Variables, Loops, Statements, Classes, etc. Basic Programming Structure Working with Arrays Working with methods Working with enumerations Working with structures Value types vs Reference types Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

5 Class 2: Course Objectives
Understand of the Philosophy of the C# Language Utilize Structured Methodology in Constructing C# Modules Create, Compile, Debug C# Programs using Variables, functions, arrays, classes, .Net framework elements Understand the concepts behind Object Oriented Programming Understand how inheritance and polymorphism works Understand how exception handling works Understand object lifetimes in C# Understand how to connect to a database to retrieve data using ADO Understand what interfaces are, how to use them, and why to use them. Understand about collections and generics Understand delegates, events, and lamdas. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. 1 1 1 1 1 1 1 1 1 1

6 Class 2 Schedule Session 1: Review, Introductions
Object Oriented Programming overview Session 2: More OOP (continued) Session 3: Inheritance and Polymorphism Session 4: Exception handling and object lifetime. Session 5: Accessing data via ADO Session 6: More ADO (continued) Session 7: Still more ADO (continued) Session 8: Interfaces Session 9: Delegates and Events Session 10: An introduction to Windows Presentation Foundation Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

7 Questions before we get started?
Course Textbook Text is Pro C# 2010 and the .Net 3.5 Platform Andrew Troelsen I chose this because: Good text Reasonable to read Great reference book to have in the future My exercises are typically not directly from the book This way you can have more exercises available to you Use it as a source to augment my lectures Most of our discussions will be chapters 5-11,21,22 If you can’t find associated reading, let me know Questions before we get started? Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

8 Class Format Class is designed around the lecture/lab format
We will discuss a subject in class in detail, Then YOU will experience that subject with one or more labs Feel free to ask questions any time Even stupid ones, like “Why is it called C#?” It’s critical that you understand as we encounter the material, because we build on this knowledge If it’s appropriate to defer the question until later, I will Questions between sessions? Contact me at I’ll try to get back to you in a timely manner Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

9 Slides Over the years, I’ve found that the best system for me is to have a series of PowerPoint slides “lead” our discussion This allows me to present the material in an organized way I also make these slides available to you This way, you can use them for notes or for a reference in the future Because they're used as a reference, I try to make sure they're complete This may make them 'busier' than many slide presentations, but I think it's worth it I also like to make use of these “speech bubbles”. They help me make a point without losing the focus of the slide. Don’t let these throw you off. So when you use the slides, remember to ‘run’ the presentation (“View Slide Show”) in order to make the bubbles move out of the way until appropriate. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

10 Facility Basics Restrooms, etc.
I usually try to take a 15 minute break every hour or so If you feel I've gone "too long", let me know. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

11 Environment Basics You should assume that all data will be wiped off the disk between sessions It may not be, but don’t take changes You can copy it to a USB drive or to yourself Or you can save it to the network Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

12 Let’s introduce ourselves with
People Basics Mostly for my benefit Let’s introduce ourselves with Your name What you do Why you are taking this course Are there any specific things you were hoping to learn Your favorite non-computer pass time Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

13 Questions before we go forth?
Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

14 Windows and Web Apps in C#
Level 1 Review Windows and Web Apps in C# Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

15 Level 1 Review I’d like to take a few minutes to review Level 1
This will establish a shared vocabulary Now that you’ve worked with C# for a while, you might see it from a different perspective If nothing else, it’s just good to stop and review every now-and-then. Let’s review: The .NET Framework The Common Language Runtime (CLR) The Foundation Class Library (FCL) Compilation and the Common Intermediate Language (CIL) Assemblies and Metadata Ready to go? Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

16 What is the .NET Framework?
It is a platform created by Microsoft for developing applications. Technically, not just for the Windows OS. Different versions can work on other OS, such as Unix, Linux, Macintosh, Solaris, and hand-held devices. However, this is largely academic… .Net is pretty much Windows oriented (desktop and mobile) No restriction on the kind of application Previously, VS supported Windows and console applications only. Visual Interdev supported Web applications. Now VS supports Windows applications, web applications, web services, console applications, and mobile applications. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

17 What is the .NET Framework?
Designed to be used from any language that is “.NET-aware”. Common Language Specification (CLS) or the Common Language Infrastructure (CLI) Standards. C#, C++, VB, Jscript, Java, COBOL, Fortran, Perl, Smalltalk, Pascal, Eiffel, and others. Different programming languages can interoperate with each other. Organizations and individuals can focus on developing applications rather than learning new languages and new tools for each of those languages. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

18 About .NET Framework Development began in 1997.
C# was announced in July 2000 with the framework. .NET Framework 2 and VS 2005 release in fall 2005. .NET Framework 3 shipped in late 2006. Visual Studio 2008 is now available with the .NET Framework version 3.5 The Framework has two main subsystems The common language runtime .NET Framework class library Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

19 The .Net Framework C# C++ VB Perl etc… XML Web Services User Interface
The rest of the .Net pieces are functionality that can be compiled into your program. These include… Finally, the top level is the program code. One benefit of .Net is that programs can now consist multiple modules created by separate languages. All because they have the same base support components. This level supports the 3 primary ways users interact with programs: the user interface, XML Web Services (automated XML processing), and ASP.Net (automated Web processing) ADO.Net provides consistent database connectivity, and also supports XML in a consistent, operating-system level implementation. The .Net Classes provide additional functionality to those programs using .Net. Many of these encapsulate Windows functionality to make it easier to program. The next level up is the Common Language Runtime. This is an interface that all .Net languages write to. The code you compile is not machine code, but an intermediate language (CIL), which the Common Language Runtime translates into machine code to execute. This all happens automatically when you execute a .Net program. Compiled C# C++ VB Perl etc… So these pieces comprise the runtime components of .Net: those pieces that are interpreted, analyzed, and processed at runtime. XML Web Services User Interface ASP.Net Sitting just above the Win32 API are key components like transaction processing and message queuing. This is also part of the operating system. ADO.Net: Data and XML At the heart of Windows is the Win32 API. This is a C-language level interface to which all Windows programs must access in order to work. .Net is build on top of this interface. .Net Framework Class Library Runtime Common Language Runtime (CLR) Message Queuing COM+ (Transactions, Partitions, Object Pooling) IIS WMI Win32 API Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

20 Common Language Runtime
The foundation of the .NET Framework Responsible for providing a consistent interface between applications and the operating system. It provides key elements used by all programs, like Memory management Security Exception handling Let’s take a look at the CLR… Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

21 The Common Language Runtime
Exceptions are consistent throughout all .Net programs because they’re handled by the CLR Base Class Library Support Here’s the JIT compiler that translates MISL to machine code. Thread Support COM Marshaler And with debugging handled in the CLR, you can debug programs modules written by different compilers easily. Because the CLR contains a Type Checker, data types can remain similar between compilers, allowing (for example) VB modules to work with C# modules. The Security Engine makes sure permissions are appropriate before access to resources is granted. Type Checker Exception Manager Security Engine Debug Engine MSIL to Native Compiler Code Manager Garbage Collector Class Loader Questions so far? Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

22 The Framework Class Library
The FCL (or BCL for base class library) is a comprehensive, object-oriented collection of reusable code. Includes the Common Type System (CTS) Types in a specific language (VB .NET: Integer, C#: int) are mapped to the same type in the CTS (System.Int32). An integer in one language is the same as an integer in another language in size, data boundaries, and usage. In the past, this wasn’t true: an Integer in VB was 2 bytes (16 bits) while in C++ it was 4 bytes (32 bits). Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

23 Comparing .NET to C# .NET Framework C#
A set of services and types installed on top of the operating system that are used by .NET-enabled applications. C# One of many .NET-aware languages used to write applications that utilize the .NET Framework. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

24 The Traditional Compilation Process
Execution Time (Phase 2) Compilation Time (Phase 1) C++ Source Code C++ Compiler Perl Source Code Perl Compiler Machine Language Native Source Cobol Source Code Cobol Compiler Executed by the computer Asm Source Code Asm Compiler Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

25 The .NET Compilation Process
Execution Time (Phase 2) Compilation Time (Phase 1) The JIT compiler on a per-method basis C# Source Code C# Compiler Perl Source Code Perl Compiler Machine Language Native Source CIL and Metadata (Assembly) Cobol Source Code Cobol Compiler Executed by the computer C++ Source Code C++ Compiler Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

26 Comparing Compilation
We compile source code into the Common Intermediate Language (CIL). The older term is the Microsoft Intermediate Language or MSIL. It was changed to CIL once it was standardized. CIL is later compiled at run time by the Just-In-Time compiler into the platform’s native code. The JIT compiler only compiles the code being accessed, not all the code in the app - done on a per-method basis. The JIT is quite fast, and generates very good code. The presence of metadata with CIL Describes in GREAT detail what’s in the CIL. This is used by all .NET languages and by the CLR to discover services each type has to offer. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

27 What is an Assembly? It forms the smallest unit of deployment, and supports installation, version control, reusability, and security permissions. It is a collection of resources (code, data) that are built to work together and form a logical unit of functionality. An assembly can contain multiple physical files on disk, but logically to the CLR it is a single unit. It provides the CLR with the information that it needs to be aware of the resources contained in the assembly. To the runtime, a resource does not exist outside the context of an assembly. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

28 What is an Assembly? It contains code that the CLR executes.
Each assembly has a single entry point. It forms a security boundary. The assembly allows or denies access to its internal resources. It forms a reference scope boundary. The identity of every resource includes the name of the assembly in which it resides. It forms a type uniqueness boundary. Type X in Assembly A is different than Type X in Assembly B. It forms a version boundary. All resources in an assembly are of the same version. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

29 What is an Assembly? Any program created for .NET will consist of one of more assemblies. It is a logical, self-describing package that contains: CIL – the code Metadata – describes the contents Resources – such as images or sounds Can be viewed from two perspectives: Developer: from the inside out where an assembly is a group of related pieces. Client: from the outside in where an assembly is a single unit to be referenced. Let’s look at it from each of these perspectives… Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

30 The Developer’s Perspective
When you write a C# program, you will specify whether you want an executable (.exe) or a library (.dll). Both kinds of outputs are called Portable Executable files, or PE files. Only .exe files can run on their own. DLLs must be invoked by an executable. When you build a C# program, you create an assembly, which is a PE file. Any PE file can be reused by another program through a simple reference. Each assembly can have only one entry point (that is, DllMain, WinMain, or Main). This entry point is used by the CLR to access the contents of the assembly. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

31 The Developer’s Perspective
Compilation Time Execution Time If the developer needs to use code from an existing assembly. The JIT Compiler C# Source Code Already Existing Assemblies with Classes Machine Language Native Source C# Compiler Assembly PE EXE File CIL and Metadata Executed by the computer Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

32 The Client’s Perspective
To the developer, an assembly is a physical group of one or more files with references to each found in the assembly’s manifest. To the client, an assembly is a single entity of functionality. Client here means an application that references an assembly. The client will request a resource from the CLR by providing it the reference information it has in its metadata (it was placed there when the client was compiled). The CLR will locate the assembly and look at the referenced assembly’s metadata to determine if it has the services the client needs. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

33 The Client’s Perspective
In need of types outside of its assembly Runtime locates type in assembly by “reading” metadata Created during design time by the dev. Assembly CIL, Metadata, and Resources Module 1 Module 2 Resources Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

34 Let’s Talk C# Microsoft developed C# to be a ‘next generation’ language to: Provide an easy and powerful tool to the C++ oriented community to program using .Net Overcome some limitations on previous languages, specifically C++ Add some capabilities to objects that C++ doesn’t support Remove some of the more error-prone pieces of the C++ type languages Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

35 And, let’s be honest So let’s try out a little C#...
Respond to the needs of (and attract some of the customer base of) Java C# is very similar to Java, yet with some very significant improvements Have a programming language used by a large community where Microsoft can move faster to keep it current C++ changes require an open-standards committee to approve So let’s try out a little C#... Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

36 What is C#? Goal of C# (as marketing would have it):
To provide a simple, safe, modern, object-oriented, Internet-centric, high performance language for .NET development. Draws on the lessons learned over the past 30+ years. Close examination of C# reveals its roots. Visual Basic, C, C++. The ONLY language initially developed from the ground up for the .NET Framework. VB.NET and VC++ were extended to allow the development of .NET applications. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

37 Simple: ~90 keywords, small set of types.
The C# Language Simple: ~90 keywords, small set of types. Includes all the support for structured, component-based, OO programming. Code written in C# is “managed” code. This means the .NET Framework runtime manages the memory as your program executes. Remember that C# IS Case Sensitive! Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

38 Common (C++) Programming Errors
Forgetting to allocate and/or free memory. Setting a pointer to the wrong memory location. Forgetting to declare a variable. Forgetting to initialize a variable. Declaring and initializing memory, but then never using it. Forgetting to increment and/or decrement the reference counter on a COM object. Not handling errors correctly (or not at all). Corrupting memory with pointers. Storing more characters in an array than it can handle. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

39 C# Addresses These Errors
No pointers: No need to perform direct pointer manipulation and memory management. If there is a need, it is still supported in C# via the unsafe keyword. Automatic Memory Management: Runtime performs garbage collection on your behalf. Tracks memory usage and cleans up unused memory. Strong types and type-safety: To prevent the mixing of data between types, illegal assignments, and illegal access to memory that should be off limits. For example, CInt() in VB.NET will convert a fraction to a whole number using truncation whereas the C# compiler will generate an error. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

40 C# Addresses These Errors
Variable initialization: It is required rather than optional in C#. Consistent error handling: The Framework manages errors in a unified way: exceptions from the ground up In other languages, exceptions were an afterthought Unified type system: All the intrinsic data types in C# such as int, long, string map to equivalent types in the framework. These types are “proper types” or “full-featured types”; they not only hold data, they have methods that allow us to act on that data. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved. Chapter 1 – C# and the .NET FrameworkC# and the .NET Framework – Chapter 1

41 .Net Summary Rapid Development Tool: A new framework for building applications faster and easier using less code. Independent: No multi-language or platform issues because the Common Language Runtime (CLR) manages this Functional: The .NET class library provides functionality to handle basic tasks (files, security, arrays, debugging, etc) Unification: You no longer need to deal with multiple frameworks such as MFC, Java WFC, VB api, ATL, and so forth. Productive: No need to sacrifice flexibility to raise productivity or vice-versa. Powerful: Provides quick development combined with all the functionalities beneath the platform (the ability to code at a low-level when the need arises). Adaptive: C# has high fidelity with C and C++ programmers. A quick transition for C/C++ developers. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

42 Any questions on our quick review?
Good. Then you should have no problem with a… Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

43 Question 1 of 5 What is the CLR? The Common Language Runtime. It is the runtime environment within which all .Net applications are run. Hit handles things like security, garbage collection, and just-in-time compiling. Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

44 What is an array? How do you declare an array of strings in C#?
Question 2 of 5 What is an array? How do you declare an array of strings in C#? An array is a collection of elements that have the same data type You declare an array of strings like: string[] Names = string[25]; Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

45 What is a structure? How do you declare a structure?
Question 3 of 5 What is a structure? How do you declare a structure? A structure is a collection of elements that can (but doesn’t have to) have different data types. They are grouped into a structure because they are related somehow. You declare a structure like: struct Name { string firstName; char middleInitial; string lastName; } We’ll have a review structures later in this course… Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

46 What is an enumeration? How do I declare one?
Question 4 of 5 What is an enumeration? How do I declare one? An enumeration is a collection of (integer by default) constant values that are somehow related You declare an enumeration like enum Pet { dog, cat, fish } // dog=0, cat=1, fish=2 enum Coins { penny=1, nickel=5, dime=10, quarter=25 }; Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

47 What is the difference between value types and reference types?
Question 5 of 5 What is the difference between value types and reference types? A value type contains the actual data age A reference type contains a reference to (“the memory address of”) the data name 3 John Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

48 Review and Starting Project
In The Beginning… Review and Starting Project Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

49 Starting Project We’re going to start off by giving you a chance to do some coding! This will give us a starter for a program that we can continue to build on throughout the class The program will simulate a Checkbook Register For those born after the Internet, this was a notebook you would keep that kept track of your check withdrawals, ATM withdrawals, deposits, and the like. The idea was to allow you to always know what your account balance was. Novel idea, no? Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

50 Starting Project Anyway, we’re looking for a display like this:
It starts by displaying the title and the initial balance (which, along with the transactions, is provided for you). The running balance. This starts with the Initial Balance, then for each withdrawal you deduct the amount of the transaction. For each deposit, however, you add the amount of the transaction. So, as you can see, this will be a Console Application (for now…) Anyway, we’re looking for a display like this: Whom the withdrawal was for (note deposits just have “(Deposit)” ) The amount of the transaction, and Then, for each transaction, you display… The date of the transaction The type of transaction (Check withdrawal, ATM withdrawal, or Deposit). If it’s a check withdrawal, the check number. You’ll see this display again, but does the output make sense? The idea is that at the end, you can see your current balance ($454.00) Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

51 Some things you’ll need to know:
Starting Project Some things you’ll need to know: I’m providing you with a class called “Trans” (in trans.cs). It is the place where you’ll get the initial balance and all the transaction information. Let’s take a moment to Start the initial project in VS Add the Trans class Review the Trans class to see what functions it has and how to use it… Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

52 Starting Project Some more things you’ll need to know:
Start by displaying the title and the initial balances (transactions.InitialBalance) Use the “placeholder” notation for Console.WriteLine, specifying the “c” as the display type: Console.WriteLine(“{0:c}”,transactions.InitialBalance) You can also use :d for short date (10/11/2012) Use a number before the : for a consistent display length So “{0,10:c}; or {1,10} displays 10 chars always. To display the transactions, create a loop that goes from 0 to transactions.NumTrans Inside the loop, get the different elements from transactions using the Getxxx() methods. Here’s that display once more Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.

53 Starting Project 45 Minutes Good Luck! Last Update: 4/11
Copyright (C) 2009 by David Figge. All Rights Reserved.

54 Windows and Web Apps in C#
End of Session 1 Windows and Web Apps in C# Last Update: 4/11 Copyright (C) 2009 by David Figge. All Rights Reserved.


Download ppt "Windows and Web Apps in C#"

Similar presentations


Ads by Google