SlideShare a Scribd company logo
Overview of C# 
CS331
Structure of a C# Program 
// Specify namespaces we use classes from here 
using System; 
using System.Threading; // Specify more specific namespaces 
namespace AppNamespace 
{ 
// Comments that start with /// used for 
// creating online documentation, like javadoc 
/// <summary> 
/// Summary description for Class1. 
/// </summary> 
class Class1 
{ 
// .. Code for class goes here 
} 
}
Defining a Class 
class Class1 
{ 
static void Main(string[] args) 
{ 
// Your code would go here, e.g. 
Console.WriteLine("hi"); 
}/ 
* We can define other methods and vars for the class */ 
// Constructor 
Class1() 
{ 
// Code 
}/ 
/ Some method, use public, private, protected 
// Use static as well just like Java 
public void foo() 
{ 
// Code 
}/ 
/ Instance, Static Variables 
private int m_number; 
public static double m_stuff; 
}
C# Basics 
• C# code normally uses the file extension of “.cs”. 
• Note similarities to Java 
– A few annoying differences, e.g. “Main” instead of “main”. 
• If a namespace is left out, your code is placed into the 
default, global, namespace. 
• The “using” directive tells C# what methods you would like 
to use from that namespace. 
– If we left out the “using System” statement, then we would have had 
to write “System.Console.WriteLine” instead of just 
“Console.WriteLine”. 
• It is normal for each class to be defined in a separate file, 
but you could put all the classes in one file if you wish. 
– Using Visual Studio .NET’s “P)roject, Add C)lass” menu option 
will create separate files for your classes by default.
Getting Help 
• If MSDN is installed 
– Online help resource built into Visual Studio .NET. 
– Help Menu, look up C# programming language reference 
– Dynamic Help 
• If MSDN is not installed, you can go online to access the 
references. It is accessible from: 
– http://msdn.microsoft.com/library/default.asp 
– You will have to drill down to VS.NET, Documentation, VB and 
C#, and then to the C# reference. 
• Both include numerous tutorials, or search on keywords
Basics: Output with WriteLine 
• System.Console.WriteLine() will output a string to the 
console. You can use this just like Java’s 
System.out.println(): 
System.Console.WriteLine(“hello world “ + 10/2); 
will output: 
hello world 5 
• We can also use {0}, {1}, {2}, … etc. to indicate arguments 
in the WriteLine statement to print. For example: 
Console.WriteLine(“hi {0} you are {0} and your age is {1}”, 
“Kenrick”, 23); 
will output: 
hi Kenrick you are Kenrick and your age is 23
WriteLine Options 
• There are also options to control things such as the number 
of columns to use for each variable, the number of 
decimals places to print, etc. For example, we could 
use :C to specify the value should be displayed as 
currency: 
Console.WriteLine(“you have {0:C} dollars.”, 1.3); 
outputs as: 
you have $1.30 dollars. 
• See the online help or the text for more formatting options.
Data Types 
• C# supports value 
types and reference 
types. 
– Value types are 
essentially the 
primitive types found 
in most languages, and 
are stored directly on 
the stack. 
– Reference types are 
objects and are created 
on the heap. 
Built-In Types 
C# Type .NET Framework type 
bool System.Boolean 
byte System.Byte 
sbyte System.SByte 
char System.Char 
decimal System.Decimal 
double System.Double 
float System.Single 
int System.Int32 
uint System.UInt32 
long System.Int64 
ulong System.UInt64 
object System.Object 
short System.Int16 
ushort System.UInt16 
string System.String 
Ref 
type
Automatic Boxing/Unboxing 
• Automatic boxing and unboxing allows value types can be 
treated like objects. 
• For example, the following public methods are defined for 
Object: 
Equals Overloaded. Determines whether two 
Object instances are equal. 
GetHashCode Serves as a hash function for a particular 
type, suitable for use in hashing algorithms 
and data structures like a hash table. 
GetType Gets the Type of the current instance. 
ToString Returns a String that represents the current 
Object. 
We can then write code such as: 
int i; 
Console.WriteLine(i.ToString()); 
int hash = i.GetHashCode(); 
This is equivalent to performing: 
z = new Object(i); 
Console.WriteLine(z.ToString()); 
First version more efficient 
due to automatic 
boxing at VM level
Structures 
• struct is another value type 
– A struct can contain constructors, constants, fields, methods, 
properties, indexers, operators, and nested types. 
– Declaration of a struct looks just like a declaration of a class, 
except we use the keyword struct instead of class. For 
example: 
public struct Point { 
public int x, y; 
public Point(int p1, int p2) { x = p1; y = p2; } 
} 
• So what is the difference between a class and struct? 
Unlike classes, structs can be created on the stack 
without using the keyword new, e.g.: 
Point p1, p2; 
p1.x = 3; p1.y = 5; 
• We also cannot use inheritance with structs.
Enumeration Type 
• Example: 
// Enum goes outside in the class definition 
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 
// Inside some method 
Days day1, day2; 
int day3; 
day1 = Days.Sat; 
day2 = Days.Tue; 
day3 = (int) Days.Fri; 
Console.WriteLine(day1); 
Console.WriteLine(day2); 
Console.WriteLine(day3); 
Output: Sat 
Tue 
6 
Enumeration really 
maps to Int as the 
underlying data type
Strings 
• The built-in string type is much like Java’s string 
type. 
– Note lowercase string, not String 
– Concatenate using the + operator 
– Just like Java, there are a variety of methods available 
to: 
• find the index Of matching strings or characters 
• generate substrings 
• compare for equality (if we use == on strings we are 
comparing if the references are equal, just like Java) 
• generate clones, trim, etc. 
• See the reference for more details.
Classes 
• Basic class definition already covered 
• To specify inheritance use a colon after the 
class name and then the base class. 
– To invoke the constructor for the base class in a 
derived class, we must use the keyword “base” 
after the constructor in the derived class. 
– We must also be explicit with virtual methods, 
methods are not virtual by default as with Java
Class Example 
public class BankAccount 
{ 
public double m_amount; 
BankAccount(double d) { 
m_amount = d; 
} 
public virtual string GetInfo() { 
return “Basic Account”; 
} 
} 
public class SavingsAccount : BankAccount 
{ 
// Savings Account derived from Bank Account 
// usual inheritance of methods, variables 
public double m_interest_rate; 
SavingsAccount(double d) : base(100) { // $100 bonus for 
signup 
m_interest_rate = 0.025; 
} 
public override string GetInfo() { 
string s = base.GetInfo(); 
return s + “ and Savings Account”; 
} 
}
Sample Class Usage 
SavingsAccount a = new SavingsAccount(0.05); 
Console.WriteLine(a.m_amount); 
Console.WriteLine(a.m_interest_rate); 
Console.WriteLine(a.GetInfo()); 
Then the output is: 
100 
0.05 
Basic Account and Savings Account
Class Notes 
• We must explicitly state that a method is virtual if 
we want to override it 
– By default, non-virtual methods cannot be overridden 
• We also have to explicitly state that we are 
overriding a method with the override keyword 
• To invoke a base method, use 
base.methodName().
Interfaces 
• An interface in C# is much like an interface 
in Java 
• An interface states what an object can do, 
but not how it is done. 
– It looks like a class definition but we cannot 
implement any methods in the interface nor 
include any variables. 
• Here is a sample interface:
Sample Interface 
public interface IDrivable { 
void Start(); 
void Stop(); 
void Turn(); 
} 
public class SportsCar : IDriveable { 
void Start() { 
// Code here to implement start 
} 
void Stop() { 
// Code here to implement stop 
} 
void Turn() { 
// Code here to implement turn 
} 
} 
Method that uses the Interface: 
void GoForward(IDrivable d) 
{ 
d.Start(); 
// wait 
d.Stop(); 
}
Reading Input 
• To input data, we must read it as a string and then 
convert it to the desired type. 
– Console.ReadLine() will return a line of input text as a string. 
• We can then use type.Parse(string) to convert the string 
to the desired type. For example: 
string s; 
int i; 
s = Console.ReadLine(); 
i = int.Parse(s); 
• we can also use double.Parse(s); float.Parse(s); etc. 
• There is also a useful Convert class, with methods such 
as Convert.ToDouble(val); Convert.ToBoolean(val); 
Convert.ToDateTime(val); etc.
Procedural Stuff 
• We also have our familiar procedural constructs: 
– Arithmetic, relational, Boolean operators: all the same as Java/C+ 
+ 
– For, While, Do, If : all the same as Java/C++ 
– Switch statements: Like Java, except forces a break after a case. 
Code is not allowed to “fall through” to the next case, but several 
case labels may mark the same location. 
– Math class: Math.Sin(), Math.Cos(), etc. 
• Random class: 
Random r = new Random(); 
r.NextDouble(); // Returns random double between 0-1 
r.Next(10,20); // Random int, 10 £ int < 20
Passing Parameters 
• Passing a value variable by default refers to 
the Pass by Value behavior as in Java 
public static void foo(int a) 
{ 
a=1; 
} 
static void Main(string[] args) 
{ 
int x=3; 
foo(x); 
Console.WriteLine(x); 
} 
This outputs the value of 3 because x is passed by value to 
method foo, which gets a copy of x’s value under the variable 
name of a.
Passing by Reference 
• C# allows a ref keyword to pass value types 
by reference: 
public static void foo(int ref a) 
{ 
a=1; 
} 
static void Main(string[] args) 
{ 
int x=3; 
foo(ref x); 
Console.WriteLine(x); 
} 
The ref keyword must be used in both the parameter declaration 
of the method and also when invoked, so it is clear what 
parameters are passed by reference and may be changed. 
Outputs the value of 1 since variable a in foo is really a reference 
to where x is stored in Main.
Passing Reference Variables 
• If we pass a reference variable (Objects, 
strings, etc. ) to a method, we get the same 
behavior as in Java. 
• Changes to the contents of the object are 
reflected in the caller, since there is only 
one copy of the actual object in memory 
and merely multiple references to that 
object.
Passing a Reference Variable 
• Consider the following: 
public static void foo(string s) 
{ 
s = "cow"; 
} 
static void Main(string[] args) 
{ 
string str = "moo"; 
foo(str); 
Console.WriteLine(str); 
} 
• Output is “moo” since inside method foo, the local 
reference parameter s is set to a new object in 
memory with the value “cow”. The original 
reference in str remains untouched.
Passing Reference Var by Reference 
• The following will change the string in the caller 
public static void foo(string ref s) 
{ 
s = "cow"; 
} 
static void Main(string[] args) 
{ 
string str = "moo"; 
foo(ref str); 
Console.WriteLine(str); 
} 
• Output = “cow” since foo is passed a reference to str
Arrays 
• Arrays in C# are quite similar to Java arrays. 
Arrays are always created off the heap and we 
have a reference to the array data. The format is 
just like Java: 
Type arrayname = new Type[size]; 
• For example: 
int arr = new int[100]; 
• This allocates a chunk of data off the heap large 
enough to store the array, and arr references this 
chunk of data.
More on Arrays 
• The Length property tells us the size of an array dynamically 
Console.WriteLine(arr.Length); 
// Outputs 100 for above declaration 
• If we want to declare a method parameter to be of type array we would 
use: 
public void foo(int[] data) 
• To return an array we can use: 
public int[] foo() 
• Just like in Java, if we have two array variables and want to copy one 
to the other we can’t do it with just an assignment. 
– This would assign the reference, not make a copy of the array. 
– To copy the array we must copy each element one at a time, or use the 
Clone() method to make a copy of the data and set a new reference to it 
(and garbage collect the old array values).
Multidimensional Arrays 
• Two ways to declare multidimensional arrays. 
• The following defines a 30 x 3 array: 
int[,] arr = new int[30][3]; 
• Here we put a comma inside the [] to indicate two dimensions. 
– This allocates a single chunk of memory of size 30*3*sizeof(int) and 
creates a reference to it. We use the formulas for row major order to 
access each element of the array. 
• The following defines a 30 x 3 array using an array of arrays: 
int[][] arr = new int[30][3]; 
• To an end user this looks much like the previous declaration, but 
it creates an array of 30 elements, where each element is an 
array of 3 elements. 
– This gives us the possibility of creating ragged arrays but is slower to 
access since we must dereference each array index. 
– Just like Java arrays
Related to Arrays 
• Check out the ArrayList class defined in 
System.Collections. 
– ArrayList is a class that behaves like a Java vector in that it allows 
dynamic allocation of elements that can be accessed like an array 
or also by name using a key. 
• Lastly, C# provides a new loop method, called foreach 
– Foreach will loop through each element in an array or collection. 
For example: 
string[] arr = {"hello", "world", "foo", "abracadabra"}; 
foreach (string x in arr) Console.WriteLine(x); 
• Will output each string in the array.
Delegates 
• C# uses delegates where languages such as 
C++ use function pointers. 
• A delegate defines a class that describes one 
or more methods. 
– Another method can use this definition, 
regardless of the actual code that implements it. 
– C# uses this technique to pass the 
EventHandlers to the system, where the event 
may be handled in different ways.
Delegates Example 
Compare1 uses alphabetic comparison, Compare2 uses length 
// Two different methods for comparison 
public static int compare1(string s1, string s2) 
{ 
return (s1.CompareTo(s2)); 
} 
public static int compare2(string s1, string s2) 
{ 
if (s1.Length <= s2.Length) return -1; 
else return 1; 
}
Delegates Example 
public delegate int CompareDelegate(string s1, string s2); 
// A method that uses the delegate to find the minimum 
public static string FindMin(string[] arr, CompareDelegate compare) 
{ 
int i, minIndex=0; 
for (i=1; i<arr.Length; i++) 
{ 
if (compare(arr[minIndex],arr[i])>0) minIndex=i; 
} 
return arr[minIndex]; 
} 
static void Main(string[] args) 
{ 
string[] arr = {"hello", "world", "foo", "abracadabra"}; 
string s; 
Console.WriteLine(FindMin(arr, new CompareDelegate(compare1))); 
Console.WriteLine(FindMin(arr, new CompareDelegate(compare2))); 
} 
The output of this code is: 
abracadabra (using compare1, alphabetic compare) 
foo (using compare2, length of string compare)
Next Lecture 
• Here we have covered all of the basic 
constructs that exist in the C# language 
under the Common Language Runtime! 
• Next we will see how to use various 
Windows.Forms features to create 
Windows applications with graphical 
interfaces.

More Related Content

PPT
Synapseindia dot net development
PPT
Introduction To C#
PPT
PPTX
introduction to c #
PPT
Visula C# Programming Lecture 2
PPT
Lecture 1
PPS
C++ Language
PPT
Dr archana dhawan bajaj - c# dot net
Synapseindia dot net development
Introduction To C#
introduction to c #
Visula C# Programming Lecture 2
Lecture 1
C++ Language
Dr archana dhawan bajaj - c# dot net

What's hot (20)

PPTX
C sharp part 001
PPT
Learn C# at ASIT
PPTX
Objective c slide I
PPT
C# basics
PPT
Testing for share
PPTX
PPTX
C# Tutorial
PPT
Objective-C for iOS Application Development
PPT
Learn c sharp at amc square learning
PDF
LEARN C#
PPTX
iOS Basic
PPT
C# programming
PDF
Why Java Sucks and C# Rocks (Final)
DOC
04cpp inh
PPT
Introduction to C#
PDF
Objective-C talk
PPT
Java core - Detailed Overview
C sharp part 001
Learn C# at ASIT
Objective c slide I
C# basics
Testing for share
C# Tutorial
Objective-C for iOS Application Development
Learn c sharp at amc square learning
LEARN C#
iOS Basic
C# programming
Why Java Sucks and C# Rocks (Final)
04cpp inh
Introduction to C#
Objective-C talk
Java core - Detailed Overview
Ad

Viewers also liked (14)

PPT
Al ee fla4d
PDF
Succeeding in Succession
PPTX
vaginitis diagnostico tratamiento
PPTX
my site
PPTX
Account and finance course,accounting training center in Mumbai,india
PPTX
Conductos genitales femenino vagina
PDF
BIOQUIMICA biblia
PPT
ToT certified International Professional Trainer (CIPT)
PPTX
Naeem khan
PPTX
Arshad Ansari
PPTX
The dark web
PPTX
Penicilinas pared bacteriana
PDF
Como tocar el_piano
PPTX
The dark web
Al ee fla4d
Succeeding in Succession
vaginitis diagnostico tratamiento
my site
Account and finance course,accounting training center in Mumbai,india
Conductos genitales femenino vagina
BIOQUIMICA biblia
ToT certified International Professional Trainer (CIPT)
Naeem khan
Arshad Ansari
The dark web
Penicilinas pared bacteriana
Como tocar el_piano
The dark web
Ad

Similar to Csharp_mahesh (20)

PPTX
CSharp Presentation
PPT
C Language fundamentals hhhhhhhhhhhh.ppt
DOCX
C-sharping.docx
DOCX
Unit 1 question and answer
PPT
Introduction of C# BY Adarsh Singh
PPT
C# Language Overview Part II
PPTX
Chapter 2 c#
PPTX
Notes(1).pptx
PDF
A tour of C# - Overview _ Microsoft Learn.pdf
PPTX
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
PPT
Presentatiooooooooooon00000000000001.ppt
PPTX
C#unit4
PPTX
PPT
CSharp_02_LanguageOverview_andintroduction
PDF
C# for beginners
PPTX
C# overview part 2
PPTX
PPT
Dot Net csharp Language
PPTX
5. c sharp language overview part ii
CSharp Presentation
C Language fundamentals hhhhhhhhhhhh.ppt
C-sharping.docx
Unit 1 question and answer
Introduction of C# BY Adarsh Singh
C# Language Overview Part II
Chapter 2 c#
Notes(1).pptx
A tour of C# - Overview _ Microsoft Learn.pdf
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
Presentatiooooooooooon00000000000001.ppt
C#unit4
CSharp_02_LanguageOverview_andintroduction
C# for beginners
C# overview part 2
Dot Net csharp Language
5. c sharp language overview part ii

Recently uploaded (20)

PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
PPTX
GDM (1) (1).pptx small presentation for students
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PPTX
PPH.pptx obstetrics and gynecology in nursing
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PPTX
Renaissance Architecture: A Journey from Faith to Humanism
PPTX
master seminar digital applications in india
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
Sports Quiz easy sports quiz sports quiz
PPTX
Institutional Correction lecture only . . .
PDF
01-Introduction-to-Information-Management.pdf
PPTX
Cell Structure & Organelles in detailed.
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
Module 4: Burden of Disease Tutorial Slides S2 2025
O7-L3 Supply Chain Operations - ICLT Program
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
GDM (1) (1).pptx small presentation for students
Pharmacology of Heart Failure /Pharmacotherapy of CHF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
Final Presentation General Medicine 03-08-2024.pptx
PPH.pptx obstetrics and gynecology in nursing
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Renaissance Architecture: A Journey from Faith to Humanism
master seminar digital applications in india
Microbial disease of the cardiovascular and lymphatic systems
Sports Quiz easy sports quiz sports quiz
Institutional Correction lecture only . . .
01-Introduction-to-Information-Management.pdf
Cell Structure & Organelles in detailed.

Csharp_mahesh

  • 2. Structure of a C# Program // Specify namespaces we use classes from here using System; using System.Threading; // Specify more specific namespaces namespace AppNamespace { // Comments that start with /// used for // creating online documentation, like javadoc /// <summary> /// Summary description for Class1. /// </summary> class Class1 { // .. Code for class goes here } }
  • 3. Defining a Class class Class1 { static void Main(string[] args) { // Your code would go here, e.g. Console.WriteLine("hi"); }/ * We can define other methods and vars for the class */ // Constructor Class1() { // Code }/ / Some method, use public, private, protected // Use static as well just like Java public void foo() { // Code }/ / Instance, Static Variables private int m_number; public static double m_stuff; }
  • 4. C# Basics • C# code normally uses the file extension of “.cs”. • Note similarities to Java – A few annoying differences, e.g. “Main” instead of “main”. • If a namespace is left out, your code is placed into the default, global, namespace. • The “using” directive tells C# what methods you would like to use from that namespace. – If we left out the “using System” statement, then we would have had to write “System.Console.WriteLine” instead of just “Console.WriteLine”. • It is normal for each class to be defined in a separate file, but you could put all the classes in one file if you wish. – Using Visual Studio .NET’s “P)roject, Add C)lass” menu option will create separate files for your classes by default.
  • 5. Getting Help • If MSDN is installed – Online help resource built into Visual Studio .NET. – Help Menu, look up C# programming language reference – Dynamic Help • If MSDN is not installed, you can go online to access the references. It is accessible from: – http://msdn.microsoft.com/library/default.asp – You will have to drill down to VS.NET, Documentation, VB and C#, and then to the C# reference. • Both include numerous tutorials, or search on keywords
  • 6. Basics: Output with WriteLine • System.Console.WriteLine() will output a string to the console. You can use this just like Java’s System.out.println(): System.Console.WriteLine(“hello world “ + 10/2); will output: hello world 5 • We can also use {0}, {1}, {2}, … etc. to indicate arguments in the WriteLine statement to print. For example: Console.WriteLine(“hi {0} you are {0} and your age is {1}”, “Kenrick”, 23); will output: hi Kenrick you are Kenrick and your age is 23
  • 7. WriteLine Options • There are also options to control things such as the number of columns to use for each variable, the number of decimals places to print, etc. For example, we could use :C to specify the value should be displayed as currency: Console.WriteLine(“you have {0:C} dollars.”, 1.3); outputs as: you have $1.30 dollars. • See the online help or the text for more formatting options.
  • 8. Data Types • C# supports value types and reference types. – Value types are essentially the primitive types found in most languages, and are stored directly on the stack. – Reference types are objects and are created on the heap. Built-In Types C# Type .NET Framework type bool System.Boolean byte System.Byte sbyte System.SByte char System.Char decimal System.Decimal double System.Double float System.Single int System.Int32 uint System.UInt32 long System.Int64 ulong System.UInt64 object System.Object short System.Int16 ushort System.UInt16 string System.String Ref type
  • 9. Automatic Boxing/Unboxing • Automatic boxing and unboxing allows value types can be treated like objects. • For example, the following public methods are defined for Object: Equals Overloaded. Determines whether two Object instances are equal. GetHashCode Serves as a hash function for a particular type, suitable for use in hashing algorithms and data structures like a hash table. GetType Gets the Type of the current instance. ToString Returns a String that represents the current Object. We can then write code such as: int i; Console.WriteLine(i.ToString()); int hash = i.GetHashCode(); This is equivalent to performing: z = new Object(i); Console.WriteLine(z.ToString()); First version more efficient due to automatic boxing at VM level
  • 10. Structures • struct is another value type – A struct can contain constructors, constants, fields, methods, properties, indexers, operators, and nested types. – Declaration of a struct looks just like a declaration of a class, except we use the keyword struct instead of class. For example: public struct Point { public int x, y; public Point(int p1, int p2) { x = p1; y = p2; } } • So what is the difference between a class and struct? Unlike classes, structs can be created on the stack without using the keyword new, e.g.: Point p1, p2; p1.x = 3; p1.y = 5; • We also cannot use inheritance with structs.
  • 11. Enumeration Type • Example: // Enum goes outside in the class definition enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; // Inside some method Days day1, day2; int day3; day1 = Days.Sat; day2 = Days.Tue; day3 = (int) Days.Fri; Console.WriteLine(day1); Console.WriteLine(day2); Console.WriteLine(day3); Output: Sat Tue 6 Enumeration really maps to Int as the underlying data type
  • 12. Strings • The built-in string type is much like Java’s string type. – Note lowercase string, not String – Concatenate using the + operator – Just like Java, there are a variety of methods available to: • find the index Of matching strings or characters • generate substrings • compare for equality (if we use == on strings we are comparing if the references are equal, just like Java) • generate clones, trim, etc. • See the reference for more details.
  • 13. Classes • Basic class definition already covered • To specify inheritance use a colon after the class name and then the base class. – To invoke the constructor for the base class in a derived class, we must use the keyword “base” after the constructor in the derived class. – We must also be explicit with virtual methods, methods are not virtual by default as with Java
  • 14. Class Example public class BankAccount { public double m_amount; BankAccount(double d) { m_amount = d; } public virtual string GetInfo() { return “Basic Account”; } } public class SavingsAccount : BankAccount { // Savings Account derived from Bank Account // usual inheritance of methods, variables public double m_interest_rate; SavingsAccount(double d) : base(100) { // $100 bonus for signup m_interest_rate = 0.025; } public override string GetInfo() { string s = base.GetInfo(); return s + “ and Savings Account”; } }
  • 15. Sample Class Usage SavingsAccount a = new SavingsAccount(0.05); Console.WriteLine(a.m_amount); Console.WriteLine(a.m_interest_rate); Console.WriteLine(a.GetInfo()); Then the output is: 100 0.05 Basic Account and Savings Account
  • 16. Class Notes • We must explicitly state that a method is virtual if we want to override it – By default, non-virtual methods cannot be overridden • We also have to explicitly state that we are overriding a method with the override keyword • To invoke a base method, use base.methodName().
  • 17. Interfaces • An interface in C# is much like an interface in Java • An interface states what an object can do, but not how it is done. – It looks like a class definition but we cannot implement any methods in the interface nor include any variables. • Here is a sample interface:
  • 18. Sample Interface public interface IDrivable { void Start(); void Stop(); void Turn(); } public class SportsCar : IDriveable { void Start() { // Code here to implement start } void Stop() { // Code here to implement stop } void Turn() { // Code here to implement turn } } Method that uses the Interface: void GoForward(IDrivable d) { d.Start(); // wait d.Stop(); }
  • 19. Reading Input • To input data, we must read it as a string and then convert it to the desired type. – Console.ReadLine() will return a line of input text as a string. • We can then use type.Parse(string) to convert the string to the desired type. For example: string s; int i; s = Console.ReadLine(); i = int.Parse(s); • we can also use double.Parse(s); float.Parse(s); etc. • There is also a useful Convert class, with methods such as Convert.ToDouble(val); Convert.ToBoolean(val); Convert.ToDateTime(val); etc.
  • 20. Procedural Stuff • We also have our familiar procedural constructs: – Arithmetic, relational, Boolean operators: all the same as Java/C+ + – For, While, Do, If : all the same as Java/C++ – Switch statements: Like Java, except forces a break after a case. Code is not allowed to “fall through” to the next case, but several case labels may mark the same location. – Math class: Math.Sin(), Math.Cos(), etc. • Random class: Random r = new Random(); r.NextDouble(); // Returns random double between 0-1 r.Next(10,20); // Random int, 10 £ int < 20
  • 21. Passing Parameters • Passing a value variable by default refers to the Pass by Value behavior as in Java public static void foo(int a) { a=1; } static void Main(string[] args) { int x=3; foo(x); Console.WriteLine(x); } This outputs the value of 3 because x is passed by value to method foo, which gets a copy of x’s value under the variable name of a.
  • 22. Passing by Reference • C# allows a ref keyword to pass value types by reference: public static void foo(int ref a) { a=1; } static void Main(string[] args) { int x=3; foo(ref x); Console.WriteLine(x); } The ref keyword must be used in both the parameter declaration of the method and also when invoked, so it is clear what parameters are passed by reference and may be changed. Outputs the value of 1 since variable a in foo is really a reference to where x is stored in Main.
  • 23. Passing Reference Variables • If we pass a reference variable (Objects, strings, etc. ) to a method, we get the same behavior as in Java. • Changes to the contents of the object are reflected in the caller, since there is only one copy of the actual object in memory and merely multiple references to that object.
  • 24. Passing a Reference Variable • Consider the following: public static void foo(string s) { s = "cow"; } static void Main(string[] args) { string str = "moo"; foo(str); Console.WriteLine(str); } • Output is “moo” since inside method foo, the local reference parameter s is set to a new object in memory with the value “cow”. The original reference in str remains untouched.
  • 25. Passing Reference Var by Reference • The following will change the string in the caller public static void foo(string ref s) { s = "cow"; } static void Main(string[] args) { string str = "moo"; foo(ref str); Console.WriteLine(str); } • Output = “cow” since foo is passed a reference to str
  • 26. Arrays • Arrays in C# are quite similar to Java arrays. Arrays are always created off the heap and we have a reference to the array data. The format is just like Java: Type arrayname = new Type[size]; • For example: int arr = new int[100]; • This allocates a chunk of data off the heap large enough to store the array, and arr references this chunk of data.
  • 27. More on Arrays • The Length property tells us the size of an array dynamically Console.WriteLine(arr.Length); // Outputs 100 for above declaration • If we want to declare a method parameter to be of type array we would use: public void foo(int[] data) • To return an array we can use: public int[] foo() • Just like in Java, if we have two array variables and want to copy one to the other we can’t do it with just an assignment. – This would assign the reference, not make a copy of the array. – To copy the array we must copy each element one at a time, or use the Clone() method to make a copy of the data and set a new reference to it (and garbage collect the old array values).
  • 28. Multidimensional Arrays • Two ways to declare multidimensional arrays. • The following defines a 30 x 3 array: int[,] arr = new int[30][3]; • Here we put a comma inside the [] to indicate two dimensions. – This allocates a single chunk of memory of size 30*3*sizeof(int) and creates a reference to it. We use the formulas for row major order to access each element of the array. • The following defines a 30 x 3 array using an array of arrays: int[][] arr = new int[30][3]; • To an end user this looks much like the previous declaration, but it creates an array of 30 elements, where each element is an array of 3 elements. – This gives us the possibility of creating ragged arrays but is slower to access since we must dereference each array index. – Just like Java arrays
  • 29. Related to Arrays • Check out the ArrayList class defined in System.Collections. – ArrayList is a class that behaves like a Java vector in that it allows dynamic allocation of elements that can be accessed like an array or also by name using a key. • Lastly, C# provides a new loop method, called foreach – Foreach will loop through each element in an array or collection. For example: string[] arr = {"hello", "world", "foo", "abracadabra"}; foreach (string x in arr) Console.WriteLine(x); • Will output each string in the array.
  • 30. Delegates • C# uses delegates where languages such as C++ use function pointers. • A delegate defines a class that describes one or more methods. – Another method can use this definition, regardless of the actual code that implements it. – C# uses this technique to pass the EventHandlers to the system, where the event may be handled in different ways.
  • 31. Delegates Example Compare1 uses alphabetic comparison, Compare2 uses length // Two different methods for comparison public static int compare1(string s1, string s2) { return (s1.CompareTo(s2)); } public static int compare2(string s1, string s2) { if (s1.Length <= s2.Length) return -1; else return 1; }
  • 32. Delegates Example public delegate int CompareDelegate(string s1, string s2); // A method that uses the delegate to find the minimum public static string FindMin(string[] arr, CompareDelegate compare) { int i, minIndex=0; for (i=1; i<arr.Length; i++) { if (compare(arr[minIndex],arr[i])>0) minIndex=i; } return arr[minIndex]; } static void Main(string[] args) { string[] arr = {"hello", "world", "foo", "abracadabra"}; string s; Console.WriteLine(FindMin(arr, new CompareDelegate(compare1))); Console.WriteLine(FindMin(arr, new CompareDelegate(compare2))); } The output of this code is: abracadabra (using compare1, alphabetic compare) foo (using compare2, length of string compare)
  • 33. Next Lecture • Here we have covered all of the basic constructs that exist in the C# language under the Common Language Runtime! • Next we will see how to use various Windows.Forms features to create Windows applications with graphical interfaces.