Title: Introduction to C
1Introduction to C
2a survey of C features
- object-oriented concepts
- classes and objects
- type safety
- garbage collection
- exception handing
- Visual Studio .NET 2005
- multi-language applications
- file extensions
- design / run / debug modes
- converting data
- namespaces
- parameter passing
- foreach
- looping on collections and arrays
3object-oriented concepts
4C has C-like syntax
namespace Hello public class Hello
static void Main(string args)
System.Console.WriteLine ("Hello world in
C") System.Console.ReadLine()
- it is case sensitive
- braces are used to group statements
- statements must be terminated with a semi-colon
- argument-passing is by value
- well talk about exactly what this means later
- but the resemblance is only superficial
- C is a very different language than C
5C is object oriented
- encapsulation
- no global data
- all data (fields) and operations (methods)
are inside a class - a form of information hiding
- leads to looser coupling and increases ease of
modifying code later - dan be defeated with bad coding practices
- inheritance
- a way of reusing code by extending (adding to)
or overriding (modifying) parts of existing
classes, even when you cant see the code of the
original class - extending (inheritance) is only appropriate for
very stable classes - operators and methods may also be overloaded
(defineds with multiple signatures and behaviors) - Issues and terminology can become rather complex
- in C, a class may inherit from only one
superclass - polymorphism
- interfaces
- not so much code reuse as design reuse
6classes
- In C, all data and code must reside within a
class - every type is represented by a class
public class Customer . . .
public class App public static void Main()
. . .
public class Globals . . .
public class Utility . . .
7what is an object?
- in C, an object is a programmer-defined data
structure allocated in the managed heap - the managed heap lives within the .NET runtime
- it is completely separate from the Windows system
heap that unmanaged code would use - objects in the managed heap are automatically
garbage-collected when no more references to them
exist
8what is a class?
- for object, a class must have been written in C
- the class describes what data resides in objects
of this type - well talk about what kinds of data can be used
in a few minutes - the class describes any initialization which must
be done on the data when a new object is created - the class may also define operations which can be
performed on the data held within this type of
object - In older languages, operations might have been
called functions, subroutines or procedures - In the object-oriented world, these are now
called methods - the variables are now called fields
9C is type-safe
- all code and data are associated with a type
- all objects have an associated type
- programs cannot access objects in inappropriate
ways - type usually means class in this context
- this avoids a group of errors that could occur in
C and C - invalid casts
- bad pointer arithmetic
- malicious code
10automatic memory management
- generational garbage collection
- programmers need not remember to free memory
- eliminates a group of errors
- dangling pointers
- memory leaks
- circular references
11other C features
- consistent error-reporting mechanism
- show exception handling here
- compiler detects uninitialized variables
- C doesnt do this (unless you run lint)source of
many bugs - can detect unused variables
- this warning can be turned on or off in Visual
Studio .NET - array bounds checking (optional)
- checked arithmetic
12VS.NET
13multi-language applications
- you can mix languages within the same application
- but only by using a component
- example
- multi-language version of a program
14working with Visual Studio
- modes of Visual Studio
- formerly Design" coding ? now nothing is
displayed - Running" program is actively
running - Debugging" program is paused (in
debugger) - how to know which mode you're in?
- look at the title bar
15Visual Studio Files
- Visual Studio produces lots of files
- bin folder contains .EXE, program input files
- obj folder contains temporary files
- solution (.sln) is main file for working with VS
- project (.csproj) tracks source files, settings
- C (.cs) denotes source code files
16type conversion
- there are various ways to accomplish conversions
int i 5 double d 3.2 string s
"496" d i i (int) d i
System.Convert.ToInt32(s)
implicit conversion
cast required
conversion required
17example
- an example of using types in C
- declare before you use (compiler enforced)
- initialize before you use (compiler enforced)
public class App public static void Main()
int width, height width 2
height 4 int area width height
int x int y x 2 ...
declarations
decl initializer
error, x not initialized
18A customer class
/ customer.cs / public class Customer
public string Name // fields public int
ID public Customer(string name, int id) //
constructor this.Name name this.ID
id public override string ToString()
// method return "Customer "
this.Name //class
19Main method application entry point
- here's the source code for Main, using the
Customer class from the previous slide
/ main.cs / public class App public
static void Main() Customer c c
new Customer(Jim Allchin", 94652)
System.Console.WriteLine( c.ToString() )
//class
20procedural vs. object-oriented
- in procedural programming, it's about the
sequence of statements - in object-oriented programming, it's about
operations on objects - think in terms of object.field and object.method(
), not code( )
/ C code / char s1, s2 s1 "THIS IS A
STRING" strcpy(s2, s1) tolower(s2)
21namespace
22why System.Console prefix?
- in C, all code and data must live within a class
- Classes are often nested within namespaces to
help organize their names - namespaces help prevent naming collisions
System.Console.WriteLine("Hello World!")
System namespace in FCL
Console class
WriteLine subroutine
23namespace
- a namespace N is a set of names qualified by N
namespace Workshop public class Customer
. . . public class
Product . . .
//namespace
Workshop.Customer
Workshop.Product
24fully-qualified references
- a fully-qualified reference starts with the
outermost namespace - if you want, you can import a namespace drop
imported prefix - using directive allows you to import a namespace
System.Console.WriteLine("message")
using System . . . Console.WriteLine("message"
)
25complete example
- using directive(s) specified at top of file
namespace Workshop public class Customer
. . . public class
Product . . .
/ main.cs / using System using
Workshop public class App public static
void Main() Customer c c new
Customer("jim bag", 94652)
Console.WriteLine( c.ToString() )
26parameter passing
27parameter passing
- C offers three options
- pass-by-value (default)
- pass-by-reference
- pass-by-result ("copy-out")
- More subtle than you might think
28parameter passed by value (the default)
Stack
public class App public static void Main()
int i 99 Foo(i)
System.Console.WriteLine(i) // i 99
private static void Foo(int value) value
value 1
stack frame for Main
29parameter with ref keyword
- reference to a reference is passed
- ref field must be assigned to by caller
- callee can change the original thing being
referenced
public class App public static void Main()
int Vals Vals new int1000
Vals0 99 Foo2(ref Vals)
System.Console.WriteLine(Vals0) // 9
private static void Foo2(ref int A) A
new int2000 // enlarge array A0 9
30parameter with out keyword
- no value is passed in
- called method must assign to parameter
public class App public static void Main()
int a, b ComputeXYZ(out a, out b)
System.Console.WriteLine("Results " a ", "
b) private static void ComputeXYZ(out
int r1, out int r2) r1 ... r2
...
31statements in C
- C supports the standard assortment
- assignment
- subroutine and function call
- conditional
- if, switch
- iteration
- for, while, do-while
- control Flow
- return, break, continue, goto
32examples
x obj.foo() if (x gt 0 x lt 10)
count else if (x -1) ... else ...
while (x gt 0) ... x--
for (int k 0 k lt 10 k) ...
33foreach
- specialized foreach loop provided for collections
like array - reduces risk of indexing error
- provides read-only access to collection (but
objects within collection can be modified)
int data 1, 2, 3, 4, 5 int sum
0 foreach (int x in data) sum x
foreach
type
value
collection
34concepts covered
- object-oriented concepts
- classes and objects
- type safety
- garbage collection
- exception handing
- Visual Studio .NET 2005
- multi-language applications
- file extensions
- design / run / debug modes
- converting data
- namespaces
- parameter passing
- foreach
- looping on collections and arrays
35the end of this PowerPoint file
Hooray!