Dr. Catherine Stringfellow
Dr. Stewart Carpenter
.
In both C++ and C#, one can develop
Console and Windows applications
Window apps in C++ use MFCs, in C# use the FCL for the .NET platform
FCL is composed of many namespaces using System.Windows.Forms;
if, if-else, switch similar to C++
Loops similar to C++
But there is a foreach for arrays
Class Math is located in namespace
System (unnecessary to add an assembly reference)
Using methods of static classes
ClassName.MethodName( argument1, arument2 , … )
Example:
Math.Sqrt (900.0)
Constants
Math.PI
= 3.1415926535…
Implicit Conversion
Coercion of arguments to a higher type when passed to methods or in mixed-type expressions;
Explicit Conversion
Done with cast or class Convert in namespace
System
Cast Example: int result = Square ( ( int ) y );
Value types
Contain data of the specified type
Built in types (int, float, double,…)
Programmer created struct s and enumerations
Reference types
Contain an address
Built-in ( array, object and string )
Programmer created – Classes, Interfaces and Delegates
Value types are passed by value and reference types are passed by reference by default
To pass a value type by reference so you can modify the original variable?
Use the ref keyword
• with variables already initialized
Use the out keyword
• when the called method will initialize it
Must use new operator to allocate dynamically the number of elements in the array int [] x; // declare reference to an array x = new int [ 10 ]; // dynamically allocate array
Since sorting data is important in many applications, .NET Framework includes high-speed sorting capabilities
// sort elements in array a
Array.Sort( x );
// Determine number of elements in x by property x.Length
Rectangular arrays – syntax a little different from C++
Jagged Arrays
An array of arrays of different lengths
// declaration of rectangular array int [,] array1 = new int [5,10];
// declaration and initialization of jagged array int [][] array2 = new int [ 3 ][]; array2[ 0 ] = new int [] { 1 , 2 }; array2[ 1 ] = new int [] { 3 }; array2[ 2 ] = new int [] { 4 , 5 , 6 };
The foreach repetition structure is used to iterate through values in arrays
No counter
A variable is used to represent the value of each element foreach ( int grade in gradeArray )
{ if ( grade < lowGrade ) lowGrade = grade;
}
If the constructor does not explicitly initialize data members, the data members are initialized by default
Primitive numeric types are set to 0
Boolean types are set to false
Reference types are set to null
Public properties allow clients to:
Get (obtain the values of) private data
• and may control formatting and display
Set (assign values to) private data
• and may scrutinize attempts to modify value
class Time
{ private int hour;
// property Hour public int Hour
{ get
{ return hour; }
} set
{ hour = ( ( value >= 0 && value < 24 ) ? value : 0 ); }
}
Use it in caller as cout << time.Hour; or time.Hour = 5;
When objects are no longer referenced, the
CLR performs garbage collection
Use finalizer s in conjunction with the garbage collector to release resources (database connections, file access, etc.) explicitly
Everyone in C#.NET community uses
ToString to obtain an object’s string representation.
//Method of class Point to return string representation of Point public override string ToString ( )
{ return “(" + x + ", " + y + “)" ;
}
// call method to display new point value string output += "\n\nThe new location of point is " + point;
Other “interesting” variations from familiar C++ constructs
abstract classes use keyword abstract sealed classes that cannot be overridden
Interface s use inheritance notation
Delegate s provide mechanism for passing method references
Exception handling includes a finally block to release resources