SlideShare a Scribd company logo
1 of 102
Download to read offline
C# Language Overview
(Part II)
Creating and Using Objects, Exceptions,
Strings, Generics, Collections, Attributes
Svetlin Nakov
Telerik Corporation
www.telerik.com
Table of Contents
1. Creating and Using Objects
2. Namespaces
3. Exceptions Handling
4. Strings andText Processing
5. Generics
6. Collection Classes
7. Attributes
2
Using Classes and Objects
Using the Built-In .NET Framework Classes
What is Class?
 The formal definition of class:
Definition by Google
4
Classes act as templates from which an
instance of an object is created at run
time. Classes define the properties of the
object and the methods used to control
the object's behavior.
Classes
 Classes provide the structure for objects
 Define their prototype, act as template
 Classes define:
 Set of attributes
 Represented by fields and properties
 Hold their state
 Set of actions (behavior)
 Represented by methods
 A class defines the methods and types of data
associated with an object
5
Classes – Example
6
Account
+Owner: Person
+Ammount: double
+Suspend()
+Deposit(sum:double)
+Withdraw(sum:double)
Class Name Attributes
(Properties
and Fields)
Operations
(Methods)
Objects
 An object is a concrete instance of a particular
class
 Creating an object from a class is called
instantiation
 Objects have state
 Set of values associated to their attributes
 Example:
 Class: Account
 Objects: Ivan's account, Peter's account
7
Objects – Example
8
Account
+Owner: Person
+Ammount: double
+Suspend()
+Deposit(sum:double)
+Withdraw(sum:double)
Class ivanAccount
+Owner="Ivan Kolev"
+Ammount=5000.0
peterAccount
+Owner="Peter Kirov"
+Ammount=1825.33
kirilAccount
+Owner="Kiril Kirov"
+Ammount=25.0
Object
Object
Object
Classes in C#
 Basic units that compose programs
 Implementation is encapsulated (hidden)
 Classes in C# can contain:
 Fields (member variables)
 Properties
 Methods
 Constructors
 Inner types
 Etc. (events, indexers, operators, …)
9
Classes in C# – Examples
 Example of classes:
 System.Console
 System.String (string in C#)
 System.Int32 (int in C#)
 System.Array
 System.Math
 System.Random
10
Declaring Objects
 An instance of a class or structure can be
defined like any other variable:
 Instances cannot be used if they are
not initialized
11
using System;
...
// Define two variables of type DateTime
DateTime today;
DateTime halloween;
// Declare and initialize a structure instance
DateTime today = DateTime.Now;
Fields
 Fields are data members of a class
 Can be variables and constants
 Accessing a field doesn’t invoke any actions of
the object
 Example:
 String.Empty (the "" string)
12
Accessing Fields
 Constant fields can be only read
 Variable fields can be read and modified
 Usually properties are used instead of directly
accessing variable fields
 Examples:
13
// Accessing read-only field
String empty = String.Empty;
// Accessing constant field
int maxInt = Int32.MaxValue;
Properties
 Properties look like fields (have name and
type), but they can contain code, executed
when they are accessed
 Usually used to control access to data
fields (wrappers), but can contain more
complex logic
 Can have two components (and at least one
of them) called accessors
 get for reading their value
 set for changing their value
14
Properties (2)
 According to the implemented accessors
properties can be:
 Read-only (get accessor only)
 Read and write (both get and set accessors)
 Write-only (set accessor only)
 Example of read-only property:
 String.Length
15
Accessing Properties and
Fields – Example
16
using System;
...
DateTime christmas = new DateTime(2009, 12, 25);
int day = christmas.Day;
int month = christmas.Month;
int year = christmas.Year;
Console.WriteLine(
"Christmas day: {0}, month: {1}, year: {2}",
day, month, year);
Console.WriteLine(
"Day of year: {0}", christmas.DayOfYear);
Console.WriteLine("Is {0} leap year: {1}",
year, DateTime.IsLeapYear(year));
Instance and Static Members
 Fields, properties and methods can be:
 Instance (or object members)
 Static (or class members)
 Instance members are specific for each object
 Example: different dogs have different name
 Static members are common for all instances
of a class
 Example: DateTime.MinValue is shared
between all instances of DateTime
17
Instance and Static
Members – Examples
 Example of instance member
 String.Length
 Each string object has different length
 Example of static member
 Console.ReadLine()
 The console is only one (global for the program)
 Reading from the console does not require to
create an instance of it
18
Methods
 Methods manipulate the data of the object to
which they belong or perform other tasks
 Examples:
 Console.WriteLine(…)
 Console.ReadLine()
 String.Substring(index, length)
 Array.GetLength(index)
19
Instance Methods
 Instance methods manipulate the data of a
specified object or perform any other tasks
 If a value is returned, it depends on the
particular class instance
 Syntax:
 The name of the instance, followed by the
name of the method, separated by dot
20
<object_name>.<method_name>(<parameters>)
Calling Instance Methods –
Examples
 Calling instance methods of String:
 Calling instance methods of DateTime:
21
String sampleLower = new String('a', 5);
String sampleUpper = sampleLower.ToUpper();
Console.WriteLine(sampleLower); // aaaaa
Console.WriteLine(sampleUpper); // AAAAA
DateTime now = DateTime.Now;
DateTime later = now.AddHours(8);
Console.WriteLine("Now: {0}", now);
Console.WriteLine("8 hours later: {0}", later);
Static Methods
 Static methods are common for all instances of
a class (shared between all instances)
 Returned value depends only on the passed
parameters
 No particular class instance is available
 Syntax:
 The name of the class, followed by the name of
the method, separated by dot
22
<class_name>.<method_name>(<parameters>)
Calling Static Methods – Examples
23
using System;
double radius = 2.9;
double area = Math.PI * Math.Pow(radius, 2);
Console.WriteLine("Area: {0}", area);
// Area: 26,4207942166902
double precise = 8.7654321;
double round3 = Math.Round(precise, 3);
double round1 = Math.Round(precise, 1);
Console.WriteLine(
"{0}; {1}; {2}", precise, round3, round1);
// 8,7654321; 8,765; 8,8
Constant
field
Static
method
Static
method
Static
method
Constructors
 Constructors are special methods used to
assign initial values of the fields in an object
 Executed when an object of a given type is
being created
 Have the same name as the class that holds
them
 Do not return a value
 A class may have several constructors with
different set of parameters
24
Constructors (2)
 Constructor is invoked by the new operator
 Examples:
25
String s = new String("Hello!"); // s = "Hello!"
<instance_name> = new <class_name>(<parameters>)
String s = new String('*', 5); // s = "*****"
DateTime dt = new DateTime(2009, 12, 30);
DateTime dt = new DateTime(2009, 12, 30, 12, 33, 59);
Int32 value = new Int32(1024);
Structures
 Structures are similar to classes
 Structures are usually used for storing data
structures, without any other functionality
 Structures can have fields, properties, etc.
 Using methods is not recommended
 Structures are value types, and classes are
reference types (this will be discussed later)
 Example of structure
 System.DateTime – represents a date and time
26
Enumerations
 Enumerations in C# are types whose values are
limited to a predefined set of values
 E.g. the days of week
 Declared by the keyword enum in C#
 Hold values from a predefined set
27
public enum Color { Red, Green, Blue, Black }
…
Color color = Color.Red;
Console.WriteLine(color); // Red
color = 5; // Compilation error!
What is a Namespace?
 Namespaces are used to organize the source
code into more logical and manageable way
 Namespaces can contain
 Definitions of classes, structures, interfaces and
other types and other namespaces
 Namespaces can contain other namespaces,
e.g.
 System namespace contains Data namespace
 The name of the nested namespace is
System.Data
28
Full Class Names
 A full name of a class is the name of the class
preceded by the name of its namespace
 Example:
 Array class, defined in the System namespace
 The full name of the class is System.Array
29
<namespace_name>.<class_name>
Including Namespaces
 The using directive in C#:
 Allows using types in a namespace, without
specifying their full name
 Example:
instead of
30
using <namespace_name>
using System;
DateTime date;
System.DateTime date;
CommonType System (CTS)
 CTS defines all data types supported in .NET
Framework
 Primitive types (e.g. int, float, object)
 Classes (e.g. String, Console, Array)
 Structures (e.g. DateTime)
 Arrays (e.g. int[], string[,])
 Etc.
 Object-oriented by design
31
CTS and Different Languages
 CTS is common for all .NET languages
 C#,VB.NET, J#, JScript.NET, ...
 CTS type mappings:
32
CTS Type C# Type VB.NET Type
System.Int32 int Integer
System.Single float Single
System.Boolean bool Boolean
System.String string String
System.Object object Object
Value and ReferenceTypes
 In CTS there are two categories of types
 Value types
 Reference types
 Placed in different areas of memory
 Value types live in the execution stack
 Freed when become out of scope
 Reference types live in the managed heap
(dynamic memory)
 Freed by the garbage collector
33
Value and Reference
Types – Examples
 Value types
 Most of the primitive types
 Structures
 Examples: int, float, bool, DateTime
 Reference types
 Classes and interfaces
 Strings
 Arrays
 Examples: string, Random, object, int[]
34
Exceptions Handling
The Paradigm of Exceptions in OOP
What are Exceptions?
 The exceptions in .NET Framework are classic
implementation of the OOP exception model
 Deliver powerful mechanism for centralized
handling of errors and unusual events
 Substitute procedure-oriented approach,
in which each function returns error code
 Simplify code construction and maintenance
 Allow the problematic situations to be
processed at multiple levels
36
Handling Exceptions
 In C# the exceptions can be handled by the
try-catch-finally construction
 catch blocks can be used multiple times to
process different exception types
37
try
{
// Do some work that can raise an exception
}
catch (SomeException)
{
// Handle the caught exception
}
Handling Exceptions – Example
38
static void Main()
{
string s = Console.ReadLine();
try
{
Int32.Parse(s);
Console.WriteLine(
"You entered valid Int32 number {0}.", s);
}
catch (FormatException)
{
Console.WriteLine("Invalid integer number!");
}
catch (OverflowException)
{
Console.WriteLine(
"The number is too big to fit in Int32!");
}
}
The System.Exception Class
 Exceptions in .NET are objects
 The System.Exception class is base for all
exceptions in CLR
 Holds information for the cause of the error or
the unusual situation
 Message – text description of the exception
 StackTrace – the snapshot of the stack at the
moment of exception throwing
 InnerException – exception caused the current
exception (if any)
39
Exception Properties – Example
40
class ExceptionsTest
{
public static void CauseFormatException()
{
string s = "an invalid number";
Int32.Parse(s);
}
static void Main()
{
try
{
CauseFormatException();
}
catch (FormatException fe)
{
Console.Error.WriteLine("Exception caught:
{0}n{1}", fe.Message, fe.StackTrace);
}
}
}
Exception Properties
 The Message property gives brief description of the
problem
 The StackTrace property is extremely useful when
identifying the reason caused the exception
41
Exception caught: Input string was not in a correct
format.
at System.Number.ParseInt32(String s, NumberStyles
style, NumberFormatInfo info)
at System.Int32.Parse(String s)
at ExceptionsTest.CauseFormatException() in
c:consoleapplication1exceptionstest.cs:line 8
at ExceptionsTest.Main(String[] args) in
c:consoleapplication1exceptionstest.cs:line 15
Exception Properties (2)
 File names and line numbers are accessible only if the
compilation was in Debug mode
 When compiled in Release mode, the information in
the property StackTrace is quite different:
42
Exception caught: Input string was not in a correct
format.
at System.Number.ParseInt32(String s, NumberStyles
style, NumberFormatInfo info)
at ExceptionsTest.Main(String[] args)
Exception Hierarchy
 Exceptions in .NET Framework are organized
in a hierarchy
43
Types of Exceptions
 All .NET exceptions inherit from System.Exception
 The system exceptions inherit from
System.SystemException, e.g.
 System.ArgumentException
 System.NullReferenceException
 System.OutOfMemoryException
 System.StackOverflowException
 User-defined exceptions should inherit from
System.ApplicationException
44
Handling Exceptions
 When catching an exception of a particular class, all
its inheritors (child exceptions) are caught too
 Example:
 Handles ArithmeticException and its successors
DivideByZeroException and OverflowException
45
try
{
// Do some works that can raise an exception
}
catch (System.ArithmeticException)
{
// Handle the caught arithmetic exception
}
Handling All Exceptions
 All exceptions thrown by .NET managed code
inherit the System.Exception exception
 Unmanaged code can throw other exceptions
 For handling all exceptions (even unmanaged)
use the construction:
46
try
{
// Do some works that can raise any exception
}
catch
{
// Handle the caught exception
}
Throwing Exceptions
 Exceptions are thrown (raised) by throw
keyword in C#
 Used to notify the calling code in case of error
or unusual situation
 When an exception is thrown:
 The program execution stops
 The exception travels over the stack until a
suitable catch block is reached to handle it
 Unhandled exceptions display error message
47
How Exceptions Work?
48
Main()
Method 1
Method 2
Method N
2. Method call
3. Method call
4. Method call…
Main()
Method 1
Method 2
Method N
8. Find handler
7. Find handler
6. Find handler…
5.Throw an exception
.NET
CLR
Using throw Keyword
 Throwing an exception with error message:
 Exceptions can take message and cause:
 Note: if the original exception is not passed the
initial cause of the exception is lost
49
throw new ArgumentException("Invalid amount!");
try
{
Int32.Parse(str);
}
catch (FormatException fe)
{
throw new ArgumentException("Invalid number", fe);
}
Throwing Exceptions – Example
50
public static double Sqrt(double value)
{
if (value < 0)
throw new System.ArgumentOutOfRangeException(
"Sqrt for negative numbers is undefined!");
return Math.Sqrt(value);
}
static void Main()
{
try
{
Sqrt(-1);
}
catch (ArgumentOutOfRangeException ex)
{
Console.Error.WriteLine("Error: " + ex.Message);
throw;
}
}
Strings andText Processing
What Is String?
 Strings are sequences of characters
 Each character is a Unicode symbol
 Represented by the string data type in C#
(System.String)
 Example:
52
string s = "Hello, C#";
H e l l o , C #s
The System.String Class
 Strings are represented by System.String
objects in .NET Framework
 String objects contain an immutable (read-only)
sequence of characters
 Strings use Unicode in to support multiple
languages and alphabets
 Strings are stored in the dynamic memory
(managed heap)
 System.String is reference type
53
The System.String Class (2)
 String objects are like arrays of characters
(char[])
 Have fixed length (String.Length)
 Elements can be accessed directly by index
 The index is in the range [0...Length-1]
54
string s = "Hello!";
int len = s.Length; // len = 6
char ch = s[1]; // ch = 'e'
0 1 2 3 4 5
H e l l o !
index =
s[index] =
Strings – Example
55
static void Main()
{
string s =
"Stand up, stand up, Balkan Superman.";
Console.WriteLine("s = "{0}"", s);
Console.WriteLine("s.Length = {0}", s.Length);
for (int i = 0; i < s.Length; i++)
{
Console.WriteLine("s[{0}] = {1}", i, s[i]);
}
}
Declaring Strings
 There are two ways of declaring string
variables:
 Using the C# keyword string
 Using the .NET's fully qualified class name
System.String
 The above three declarations are equivalent
56
string str1;
System.String str2;
String str3;
Creating Strings
 Before initializing a string variable has null
value
 Strings can be initialized by:
 Assigning a string literal to the string variable
 Assigning the value of another string variable
 Assigning the result of operation of type string
57
Creating Strings (2)
 Not initialized variables has value of null
 Assigning a string literal
 Assigning from another string variable
 Assigning from the result of string operation
58
string s; // s is equal to null
string s = "I am a string literal!";
string s2 = s;
string s = 42.ToString();
Reading and Printing Strings
 Reading strings from the console
 Use the method Console.ReadLine()
59
string s = Console.ReadLine();
Console.Write("Please enter your name: ");
string name = Console.ReadLine();
Console.Write("Hello, {0}! ", name);
Console.WriteLine("Welcome to our party!");
 Printing strings to the console
 Use the methodsWrite() and WriteLine()
Comparing Strings
 A number of ways exist to compare two
strings:
 Dictionary-based string comparison
 Case-insensitive
 Case-sensitive
60
int result = string.Compare(str1, str2, true);
// result == 0 if str1 equals str2
// result < 0 if str1 if before str2
// result > 0 if str1 if after str2
string.Compare(str1, str2, false);
Comparing Strings – Example
 Finding the first string in a lexicographical order
from a given list of strings:
61
string[] towns = {"Sofia", "Varna", "Plovdiv",
"Pleven", "Bourgas", "Rousse", "Yambol"};
string firstTown = towns[0];
for (int i=1; i<towns.Length; i++)
{
string currentTown = towns[i];
if (String.Compare(currentTown, firstTown) < 0)
{
firstTown = currentTown;
}
}
Console.WriteLine("First town: {0}", firstTown);
Concatenating Strings
 There are two ways to combine strings:
 Using the Concat() method
 Using the + or the += operators
 Any object can be appended to a string
62
string str = String.Concat(str1, str2);
string str = str1 + str2 + str3;
string str += str1;
string name = "Peter";
int age = 22;
string s = name + " " + age; //  "Peter 22"
Searching in Strings
 Finding a character or substring within given
string
 First occurrence
 First occurrence starting at given position
 Last occurrence
63
IndexOf(string str)
IndexOf(string str, int startIndex)
LastIndexOf(string)
Searching in Strings – Example
64
string str = "C# Programming Course";
int index = str.IndexOf("C#"); // index = 0
index = str.IndexOf("Course"); // index = 15
index = str.IndexOf("COURSE"); // index = -1
// IndexOf is case-sensetive. -1 means not found
index = str.IndexOf("ram"); // index = 7
index = str.IndexOf("r"); // index = 4
index = str.IndexOf("r", 5); // index = 7
index = str.IndexOf("r", 8); // index = 18
0 1 2 3 4 5 6 7 8 9 10 11 12 13 …
C # P r o g r a m m i n g …
index =
s[index] =
Extracting Substrings
 Extracting substrings
 str.Substring(int startIndex, int length)
 str.Substring(int startIndex)
65
string filename = @"C:PicsRila2009.jpg";
string name = filename.Substring(8, 8);
// name is Rila2009
string filename = @"C:PicsSummer2009.jpg";
string nameAndExtension = filename.Substring(8);
// nameAndExtension is Summer2009.jpg
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
C :  P i c s  R i l a 2 0 0 5 . j p g
Splitting Strings
 To split a string by given separator(s) use the
following method:
 Example:
66
string[] Split(params char[])
string listOfBeers =
"Amstel, Zagorka, Tuborg, Becks.";
string[] beers =
listOfBeers.Split(' ', ',', '.');
Console.WriteLine("Available beers are:");
foreach (string beer in beers)
{
Console.WriteLine(beer);
}
Replacing and Deleting Substrings
 Replace(string, string) – replaces all
occurrences of given string with another
 The result is new string (strings are immutable)
 Remove(index, length) – deletes part of a string
and produces a new string as result
67
string cocktail = "Vodka + Martini + Cherry";
string replaced = cocktail.Replace("+", "and");
// Vodka and Martini and Cherry
string price = "$ 1234567";
string lowPrice = price.Remove(2, 3);
// $ 4567
Changing Character Casing
 Using method ToLower()
 Using method ToUpper()
68
string alpha = "aBcDeFg";
string lowerAlpha = alpha.ToLower(); // abcdefg
Console.WriteLine(lowerAlpha);
string alpha = "aBcDeFg";
string upperAlpha = alpha.ToUpper(); // ABCDEFG
Console.WriteLine(upperAlpha);
Trimming White Space
 Using method Trim()
 Using method Trim(chars)
 Using TrimStart() and TrimEnd()
69
string s = " example of white space ";
string clean = s.Trim();
Console.WriteLine(clean);
string s = " tnHello!!! n";
string clean = s.Trim(' ', ',' ,'!', 'n','t');
Console.WriteLine(clean); // Hello
string s = " C# ";
string clean = s.TrimStart(); // clean = "C# "
Constructing Strings
 Strings are immutable
 Concat(), Replace(), Trim(), ... return new
string, do not modify the old one
 Do not use "+" for strings in a loop!
 It runs very, very inefficiently (slowly)!
70
public static string DupChar(char ch, int count)
{
string result = "";
for (int i=0; i<count; i++)
result += ch;
return result;
}
Very bad practice.
Avoid this!
Changing the Contents of a
String – StringBuilder
 Use the System.Text.StringBuilder class for
modifiable strings of characters:
 Use StringBuilder if you need to keep adding
characters to a string
71
public static string ReverseString(string s)
{
StringBuilder sb = new StringBuilder();
for (int i = s.Length-1; i >= 0; i--)
sb.Append(s[i]);
return sb.ToString();
}
The StringBuilder Class
 StringBuilder keeps a buffer memory,
allocated in advance
 Most operations use the buffer memory and
do not allocate new objects
72
H e l l o , C # !StringBuilder:
Length=9
Capacity=15
Capacity
used buffer
(Length)
unused
buffer
StringBuilder – Example
 Extracting all capital letters from a string
73
public static string ExtractCapitals(string s)
{
StringBuilder result = new StringBuilder();
for (int i = 0; i<s.Length; i++)
{
if (Char.IsUpper(s[i]))
{
result.Append(s[i]);
}
}
return result.ToString();
}
Method ToString()
 All classes have public virtual method
ToString()
 Returns a human-readable, culture-sensitive
string representing the object
 Most .NET Framework types have own
implementation of ToString()
 int, float, bool, DateTime
74
int number = 5;
string s = "The number is " + number.ToString();
Console.WriteLine(s); // The number is 5
Method ToString(format)
 We can apply specific formatting when
converting objects to string
 ToString(formatString) method
75
int number = 42;
string s = number.ToString("D5"); // 00042
s = number.ToString("X"); // 2A
// Consider the default culture is Bulgarian
s = number.ToString("C"); // 42,00 лв
double d = 0.375;
s = d.ToString("P2"); // 37,50 %
Formatting Strings
 The formatting strings are different for the
different types
 Some formatting strings for numbers:
 D – number (for integer types)
 C – currency (according to current culture)
 E – number in exponential notation
 P – percentage
 X – hexadecimal number
 F – fixed point (for real numbers)
76
Method String.Format()
 Applies templates for formatting strings
 Placeholders are used for dynamic text
 Like Console.WriteLine(…)
77
string template = "If I were {0}, I would {1}.";
string sentence1 = String.Format(
template, "developer", "know C#");
Console.WriteLine(sentence1);
// If I were developer, I would know C#.
string sentence2 = String.Format(
template, "elephant", "weigh 4500 kg");
Console.WriteLine(sentence2);
// If I were elephant, I would weigh 4500 kg.
Composite Formatting
 The placeholders in the composite formatting
strings are specified as follows:
 Examples:
78
{index[,alignment][:formatString]}
double d = 0.375;
s = String.Format("{0,10:F5}", d);
// s = " 0,37500"
int number = 42;
Console.WriteLine(
"Dec {0:D} = Hex {1:X}", number, number);
// Dec 42 = Hex 2A
Formatting Dates
 Dates use their own formatting strings
 d, dd – day (with/without leading zero)
 M, MM – month
 yy, yyyy – year (2 or 4 digits)
 h, hh, m, mm, s, ss – hour, minute, second
79
DateTime now = DateTime.Now;
Console.WriteLine(
"Now is {0:d.MM.yyyy hh:mm:ss}", now);
// Now is 31.11.2009 11:30:32
Collection Classes
Lists,Trees, Dictionaries
What are Generics?
 Generics allow defining parameterized classes
that process data of unknown (generic) type
 The class can be instantiated with several
different particular types
 Example: List<T>  List<int> /
List<string> / List<Student>
 Generics are also known as "parameterized
types" or "template types"
 Similar to the templates in C++
 Similar to the generics in Java
81
The List<T> Class
 Implements the abstract data structure list
using an auto-extensible array
 All elements are of the same type T
 T can be any type, e.g. List<int>,
List<string>, List<DateTime>
 Size is dynamically increased as needed
 Basic functionality:
 Count – returns the number of elements
 Add(T) – appends given element at the end
82
List<T> – Simple Example
83
static void Main()
{
List<string> list = new List<string>();
list.Add("C#");
list.Add("Java");
list.Add("PHP");
foreach (string item in list)
{
Console.WriteLine(item);
}
// Result:
// C#
// Java
// PHP
}
List<T> – Functionality
 list[index] – access element by index
 Insert(index, T) – inserts given element to the
list at a specified position
 Remove(T) – removes the first occurrence of
given element
 RemoveAt(index) – removes the element at the
specified position
 Clear() – removes all elements
 Contains(T) – determines whether an element
is part of the list
84
List<T> – Functionality (2)
 IndexOf() – returns the index of the first
occurrence of a value in the list (zero-based)
 Reverse() – reverses the order of the elements in
the list or a portion of it
 Sort() – sorts the elements in the list or a
portion of it
 ToArray() – converts the elements of the list to
an array
 TrimExcess() – sets the capacity to the actual
number of elements
85
Primes in an Interval – Example
86
static List<int> FindPrimes(int start, int end)
{
List<int> primesList = new List<int>();
for (int num = start; num <= end; num++)
{
bool prime = true;
for (int div = 2; div <= Math.Sqrt(num); div++)
{
if (num % div == 0)
{
prime = false;
break;
}
}
if (prime)
{
primesList.Add(num);
}
}
return primesList;
}
The Stack<T> Class
 Implements the stack data structure using an
array
 Elements are of the same type T
 T can be any type, e.g. Stack<int>
 Size is dynamically increased as needed
 Basic functionality:
 Push(T) – inserts elements to the stack
 Pop() – removes and returns the top element
from the stack
87
Stack<T> – Example
 Using Push(), Pop() and Peek() methods
88
static void Main()
{
Stack<string> stack = new Stack<string>();
stack.Push("1. Ivan");
stack.Push("2. Nikolay");
stack.Push("3. Maria");
stack.Push("4. George");
Console.WriteLine("Top = {0}", stack.Peek());
while (stack.Count > 0)
{
string personName = stack.Pop();
Console.WriteLine(personName);
}
}
The Queue<T> Class
 Implements the queue data structure using a
circular resizable array
 Elements are from the same type T
 T can be any type, e.g. Stack<int>
 Size is dynamically increased as needed
 Basic functionality:
 Enqueue(T) – adds an element to the end of
the queue
 Dequeue() – removes and returns the
element at the beginning of the queue
89
Queue<T> – Example
 Using Enqueue() and Dequeue() methods
90
static void Main()
{
Queue<string> queue = new Queue<string>();
queue.Enqueue("Message One");
queue.Enqueue("Message Two");
queue.Enqueue("Message Three");
queue.Enqueue("Message Four");
while (queue.Count > 0)
{
string message = queue.Dequeue();
Console.WriteLine(message);
}
}
Dictionary<TKey,TValue> Class
 Implements the abstract data type
"Dictionary" as hash table
 Size is dynamically increased as needed
 Contains a collection of key-value pairs
arranged by the hash code of the key:
 h(key) = value
 Collisions are resolved by chaining
 Dictionary<TKey,TValue> class relies on
 Object.Equals() method for comparing the
elements
91
Dictionary<TKey,TValue>
Class (2)
 Object.GetHashCode() method for
calculating the hash codes of the elements
 Major operations:
 Add(TKey,TValue) – adds an element
with the specified key and value into the
dictionary
 Remove(TKey) – removes the element with
the specified key
 Clear() – removes all elements
 this[] – returns element by key
92
Dictionary<TKey,TValue>
Class (3)
 Count – returns the number of elements
 ContainsKey(TKey) – determines whether
the dictionary contains given key
 ContainsValue(TValue) – determines
whether the dictionary contains given value
 Keys – returns a collection of the keys
 Values – returns a collection of the values
 TryGetValue(TKey,out TValue) – if the key
is found, returns it in the TValue, otherwise
returns the default value for the TValue type
93
Dictionary<TKey,TValue> –
Example
94
Dictionary<string, int> studentsMarks =
new Dictionary<string, int>();
studentsMarks.Add("Ivan", 4);
studentsMarks.Add("Peter", 6);
studentsMarks.Add("Maria", 6);
studentsMarks.Add("George", 5);
int peterMark = studentsMarks["Peter"];
Console.WriteLine("Peter's mark: {0}", peterMark);
Console.WriteLine("Is Peter in the hash table: {0}",
studentsMarks.ContainsKey("Peter"));
Console.WriteLine("Students and grades:");
foreach (var pair in studentsMarks)
{
Console.WriteLine("{0} --> {1} ", pair.Key, pair.Value);
}
Counting Words in GivenText
95
string text = "Welcome to our C# course. In this " +
"course you will learn how to write simple " +
"programs in C# and Microsoft .NET";
string[] words = text.Split(new char[] {' ', ',', '.'},
StringSplitOptions.RemoveEmptyEntries);
var wordsCount = new Dictionary<string, int>();
foreach (string word in words)
{
if (wordsCount.ContainsKey(word))
wordsCount[word]++;
else
wordsCount.Add(word, 1);
}
foreach (var pair in wordsCount)
{
Console.WriteLine("{0} --> {1}", pair.Key, pair.Value);
}
BalancedTrees in .NET
 Balanced Binary SearchTrees
 Ordered binary search trees that have height of
log2(n) where n is the number of their nodes
 Searching costs about log2(n) comparisons
 .NET Framework has built-in implementations
of balanced search trees, e.g.:
 SortedDictionary<K,V>
 Red-black tree based map of key-value pairs
 External libraries like "Wintellect Power
Collections for .NET" are more flexible
96
Sorted Dictionary – Example
97
string text = "Welcome to our C# course. In this " +
"course you will learn how to write simple " +
"programs in C# and Microsoft .NET";
string[] words = text.Split(new char[] {' ', ',', '.'},
StringSplitOptions.RemoveEmptyEntries);
var wordsCount = new SortedDictionary<string, int>();
foreach (string word in words)
{
if (wordsCount.ContainsKey(word))
wordsCount[word]++;
else
wordsCount.Add(word, 1);
}
foreach (var pair in wordsCount)
{
Console.WriteLine("{0} --> {1}", pair.Key, pair.Value);
}
Attributes
What Attributes Are? How andWhen to UseThem?
What Are Attributes?
 Attributes are special declarative tags
 Used for attaching descriptive information
(annotations) to the declarations in the code
 At compile time attributes are saved in the
assembly's metadata
 Can be extracted from the metadata at run-
time and can be manipulated by different tools
 Instances of classes derived from
System.Attribute
99
Attributes Applying – Example
 Attribute's name is surrounded by square
brackets and is placed before the declaration
which it refers to:
 [Flags] attribute indicates that the enum
type can be treated like a set of bit flags
100
[Flags] // System.FlagsAttribute
public enum FileAccess
{
Read = 1,
Write = 2,
ReadWrite = Read | Write
}
Attributes With Parameters
 Attributes use parameters for initialization:
 In this example the [DllImport] attribute is
instantiated by the compiler
 A System.Runtime.InteropServices.
DllImportAttribute object is created,
initialized and put into the assembly metadata
101
[DllImport("user32.dll", EntryPoint="MessageBox")]
public static extern int ShowMessageBox(int hWnd,
string text, string caption, int type);
…
ShowMessageBox(0, "Some text", "Some caption", 0);
C# Language Overview
(Part II)
Questions?
http://schoolacademy.telerik.com

More Related Content

What's hot (20)

Class and object in c++
Class and object in c++Class and object in c++
Class and object in c++
 
Java Day-7
Java Day-7Java Day-7
Java Day-7
 
LectureNotes-03-DSA
LectureNotes-03-DSALectureNotes-03-DSA
LectureNotes-03-DSA
 
Generics
GenericsGenerics
Generics
 
Vectors in Java
Vectors in JavaVectors in Java
Vectors in Java
 
Lecture 24
Lecture 24Lecture 24
Lecture 24
 
Java Day-5
Java Day-5Java Day-5
Java Day-5
 
Java 103 intro to java data structures
Java 103   intro to java data structuresJava 103   intro to java data structures
Java 103 intro to java data structures
 
Lecture 9
Lecture 9Lecture 9
Lecture 9
 
Struktur data 1
Struktur data 1Struktur data 1
Struktur data 1
 
Chapter 7 - Defining Your Own Classes - Part II
Chapter 7 - Defining Your Own Classes - Part IIChapter 7 - Defining Your Own Classes - Part II
Chapter 7 - Defining Your Own Classes - Part II
 
Cis166 final review c#
Cis166 final review c#Cis166 final review c#
Cis166 final review c#
 
standard template library(STL) in C++
standard template library(STL) in C++standard template library(STL) in C++
standard template library(STL) in C++
 
Java Collections
Java  Collections Java  Collections
Java Collections
 
Lecture20 vector
Lecture20 vectorLecture20 vector
Lecture20 vector
 
Java Wrapper Classes and I/O Mechanisms
Java Wrapper Classes and I/O MechanismsJava Wrapper Classes and I/O Mechanisms
Java Wrapper Classes and I/O Mechanisms
 
Advanced c#
Advanced c#Advanced c#
Advanced c#
 
James Jesus Bermas on Crash Course on Python
James Jesus Bermas on Crash Course on PythonJames Jesus Bermas on Crash Course on Python
James Jesus Bermas on Crash Course on Python
 
Class object method constructors in java
Class object method constructors in javaClass object method constructors in java
Class object method constructors in java
 
Reflection in C Sharp
Reflection in C SharpReflection in C Sharp
Reflection in C Sharp
 

Viewers also liked

Waarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedIn
Waarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedInWaarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedIn
Waarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedInAswin Laheij
 
C# Cheat Sheet
C# Cheat SheetC# Cheat Sheet
C# Cheat SheetGlowTouch
 
c# usage,applications and advantages
c# usage,applications and advantages c# usage,applications and advantages
c# usage,applications and advantages mohamed drahem
 
.NET and C# introduction
.NET and C# introduction.NET and C# introduction
.NET and C# introductionPeter Gfader
 
Php my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.netPhp my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.netProgrammer Blog
 

Viewers also liked (10)

Waarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedIn
Waarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedInWaarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedIn
Waarom je beter een generalist kunt inhuren | Daan van Eijck | Pulse | LinkedIn
 
C# Cheat Sheet
C# Cheat SheetC# Cheat Sheet
C# Cheat Sheet
 
c# usage,applications and advantages
c# usage,applications and advantages c# usage,applications and advantages
c# usage,applications and advantages
 
.NET and C# introduction
.NET and C# introduction.NET and C# introduction
.NET and C# introduction
 
Introduction to Core Java Programming
Introduction to Core Java ProgrammingIntroduction to Core Java Programming
Introduction to Core Java Programming
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
Differences between c and c++
Differences between c and c++Differences between c and c++
Differences between c and c++
 
Introduction to Database SQL & PL/SQL
Introduction to Database SQL & PL/SQLIntroduction to Database SQL & PL/SQL
Introduction to Database SQL & PL/SQL
 
Php my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.netPhp my sql - functions - arrays - tutorial - programmerblog.net
Php my sql - functions - arrays - tutorial - programmerblog.net
 
Ppt of c++ vs c#
Ppt of c++ vs c#Ppt of c++ vs c#
Ppt of c++ vs c#
 

Similar to 5. c sharp language overview part ii

Similar to 5. c sharp language overview part ii (20)

11 Using classes and objects
11 Using classes and objects11 Using classes and objects
11 Using classes and objects
 
Using class and object java
Using class and object javaUsing class and object java
Using class and object java
 
Visula C# Programming Lecture 6
Visula C# Programming Lecture 6Visula C# Programming Lecture 6
Visula C# Programming Lecture 6
 
Defining classes-and-objects-1.0
Defining classes-and-objects-1.0Defining classes-and-objects-1.0
Defining classes-and-objects-1.0
 
Object oriented programming using c++
Object oriented programming using c++Object oriented programming using c++
Object oriented programming using c++
 
Ch-2ppt.pptx
Ch-2ppt.pptxCh-2ppt.pptx
Ch-2ppt.pptx
 
JAVA CONCEPTS
JAVA CONCEPTS JAVA CONCEPTS
JAVA CONCEPTS
 
Unit - 3.pptx
Unit - 3.pptxUnit - 3.pptx
Unit - 3.pptx
 
Reflection in C#
Reflection in C#Reflection in C#
Reflection in C#
 
Objects and Types C#
Objects and Types C#Objects and Types C#
Objects and Types C#
 
C# classes objects
C#  classes objectsC#  classes objects
C# classes objects
 
C# program structure
C# program structureC# program structure
C# program structure
 
Object Oriented Programming In .Net
Object Oriented Programming In .NetObject Oriented Programming In .Net
Object Oriented Programming In .Net
 
Ch03
Ch03Ch03
Ch03
 
Object and class
Object and classObject and class
Object and class
 
03 object-classes-pbl-4-slots
03 object-classes-pbl-4-slots03 object-classes-pbl-4-slots
03 object-classes-pbl-4-slots
 
03 object-classes-pbl-4-slots
03 object-classes-pbl-4-slots03 object-classes-pbl-4-slots
03 object-classes-pbl-4-slots
 
Unit ii
Unit   iiUnit   ii
Unit ii
 
9781439035665 ppt ch08
9781439035665 ppt ch089781439035665 ppt ch08
9781439035665 ppt ch08
 
Classes objects in java
Classes objects in javaClasses objects in java
Classes objects in java
 

More from Svetlin Nakov

BG-IT-Edu: отворено учебно съдържание за ИТ учители
BG-IT-Edu: отворено учебно съдържание за ИТ учителиBG-IT-Edu: отворено учебно съдържание за ИТ учители
BG-IT-Edu: отворено учебно съдържание за ИТ учителиSvetlin Nakov
 
Programming World in 2024
Programming World in 2024Programming World in 2024
Programming World in 2024Svetlin Nakov
 
AI Tools for Business and Startups
AI Tools for Business and StartupsAI Tools for Business and Startups
AI Tools for Business and StartupsSvetlin Nakov
 
AI Tools for Scientists - Nakov (Oct 2023)
AI Tools for Scientists - Nakov (Oct 2023)AI Tools for Scientists - Nakov (Oct 2023)
AI Tools for Scientists - Nakov (Oct 2023)Svetlin Nakov
 
AI Tools for Entrepreneurs
AI Tools for EntrepreneursAI Tools for Entrepreneurs
AI Tools for EntrepreneursSvetlin Nakov
 
Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023
Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023
Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023Svetlin Nakov
 
AI Tools for Business and Personal Life
AI Tools for Business and Personal LifeAI Tools for Business and Personal Life
AI Tools for Business and Personal LifeSvetlin Nakov
 
Дипломна работа: учебно съдържание по ООП - Светлин Наков
Дипломна работа: учебно съдържание по ООП - Светлин НаковДипломна работа: учебно съдържание по ООП - Светлин Наков
Дипломна работа: учебно съдържание по ООП - Светлин НаковSvetlin Nakov
 
Дипломна работа: учебно съдържание по ООП
Дипломна работа: учебно съдържание по ООПДипломна работа: учебно съдържание по ООП
Дипломна работа: учебно съдържание по ООПSvetlin Nakov
 
Свободно ИТ учебно съдържание за учители по програмиране и ИТ
Свободно ИТ учебно съдържание за учители по програмиране и ИТСвободно ИТ учебно съдържание за учители по програмиране и ИТ
Свободно ИТ учебно съдържание за учители по програмиране и ИТSvetlin Nakov
 
AI and the Professions of the Future
AI and the Professions of the FutureAI and the Professions of the Future
AI and the Professions of the FutureSvetlin Nakov
 
Programming Languages Trends for 2023
Programming Languages Trends for 2023Programming Languages Trends for 2023
Programming Languages Trends for 2023Svetlin Nakov
 
IT Professions and How to Become a Developer
IT Professions and How to Become a DeveloperIT Professions and How to Become a Developer
IT Professions and How to Become a DeveloperSvetlin Nakov
 
GitHub Actions (Nakov at RuseConf, Sept 2022)
GitHub Actions (Nakov at RuseConf, Sept 2022)GitHub Actions (Nakov at RuseConf, Sept 2022)
GitHub Actions (Nakov at RuseConf, Sept 2022)Svetlin Nakov
 
IT Professions and Their Future
IT Professions and Their FutureIT Professions and Their Future
IT Professions and Their FutureSvetlin Nakov
 
How to Become a QA Engineer and Start a Job
How to Become a QA Engineer and Start a JobHow to Become a QA Engineer and Start a Job
How to Become a QA Engineer and Start a JobSvetlin Nakov
 
Призвание и цели: моята рецепта
Призвание и цели: моята рецептаПризвание и цели: моята рецепта
Призвание и цели: моята рецептаSvetlin Nakov
 
What Mongolian IT Industry Can Learn from Bulgaria?
What Mongolian IT Industry Can Learn from Bulgaria?What Mongolian IT Industry Can Learn from Bulgaria?
What Mongolian IT Industry Can Learn from Bulgaria?Svetlin Nakov
 
How to Become a Software Developer - Nakov in Mongolia (Oct 2022)
How to Become a Software Developer - Nakov in Mongolia (Oct 2022)How to Become a Software Developer - Nakov in Mongolia (Oct 2022)
How to Become a Software Developer - Nakov in Mongolia (Oct 2022)Svetlin Nakov
 
Blockchain and DeFi Overview (Nakov, Sept 2021)
Blockchain and DeFi Overview (Nakov, Sept 2021)Blockchain and DeFi Overview (Nakov, Sept 2021)
Blockchain and DeFi Overview (Nakov, Sept 2021)Svetlin Nakov
 

More from Svetlin Nakov (20)

BG-IT-Edu: отворено учебно съдържание за ИТ учители
BG-IT-Edu: отворено учебно съдържание за ИТ учителиBG-IT-Edu: отворено учебно съдържание за ИТ учители
BG-IT-Edu: отворено учебно съдържание за ИТ учители
 
Programming World in 2024
Programming World in 2024Programming World in 2024
Programming World in 2024
 
AI Tools for Business and Startups
AI Tools for Business and StartupsAI Tools for Business and Startups
AI Tools for Business and Startups
 
AI Tools for Scientists - Nakov (Oct 2023)
AI Tools for Scientists - Nakov (Oct 2023)AI Tools for Scientists - Nakov (Oct 2023)
AI Tools for Scientists - Nakov (Oct 2023)
 
AI Tools for Entrepreneurs
AI Tools for EntrepreneursAI Tools for Entrepreneurs
AI Tools for Entrepreneurs
 
Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023
Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023
Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023
 
AI Tools for Business and Personal Life
AI Tools for Business and Personal LifeAI Tools for Business and Personal Life
AI Tools for Business and Personal Life
 
Дипломна работа: учебно съдържание по ООП - Светлин Наков
Дипломна работа: учебно съдържание по ООП - Светлин НаковДипломна работа: учебно съдържание по ООП - Светлин Наков
Дипломна работа: учебно съдържание по ООП - Светлин Наков
 
Дипломна работа: учебно съдържание по ООП
Дипломна работа: учебно съдържание по ООПДипломна работа: учебно съдържание по ООП
Дипломна работа: учебно съдържание по ООП
 
Свободно ИТ учебно съдържание за учители по програмиране и ИТ
Свободно ИТ учебно съдържание за учители по програмиране и ИТСвободно ИТ учебно съдържание за учители по програмиране и ИТ
Свободно ИТ учебно съдържание за учители по програмиране и ИТ
 
AI and the Professions of the Future
AI and the Professions of the FutureAI and the Professions of the Future
AI and the Professions of the Future
 
Programming Languages Trends for 2023
Programming Languages Trends for 2023Programming Languages Trends for 2023
Programming Languages Trends for 2023
 
IT Professions and How to Become a Developer
IT Professions and How to Become a DeveloperIT Professions and How to Become a Developer
IT Professions and How to Become a Developer
 
GitHub Actions (Nakov at RuseConf, Sept 2022)
GitHub Actions (Nakov at RuseConf, Sept 2022)GitHub Actions (Nakov at RuseConf, Sept 2022)
GitHub Actions (Nakov at RuseConf, Sept 2022)
 
IT Professions and Their Future
IT Professions and Their FutureIT Professions and Their Future
IT Professions and Their Future
 
How to Become a QA Engineer and Start a Job
How to Become a QA Engineer and Start a JobHow to Become a QA Engineer and Start a Job
How to Become a QA Engineer and Start a Job
 
Призвание и цели: моята рецепта
Призвание и цели: моята рецептаПризвание и цели: моята рецепта
Призвание и цели: моята рецепта
 
What Mongolian IT Industry Can Learn from Bulgaria?
What Mongolian IT Industry Can Learn from Bulgaria?What Mongolian IT Industry Can Learn from Bulgaria?
What Mongolian IT Industry Can Learn from Bulgaria?
 
How to Become a Software Developer - Nakov in Mongolia (Oct 2022)
How to Become a Software Developer - Nakov in Mongolia (Oct 2022)How to Become a Software Developer - Nakov in Mongolia (Oct 2022)
How to Become a Software Developer - Nakov in Mongolia (Oct 2022)
 
Blockchain and DeFi Overview (Nakov, Sept 2021)
Blockchain and DeFi Overview (Nakov, Sept 2021)Blockchain and DeFi Overview (Nakov, Sept 2021)
Blockchain and DeFi Overview (Nakov, Sept 2021)
 

Recently uploaded

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 

5. c sharp language overview part ii

  • 1. C# Language Overview (Part II) Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation www.telerik.com
  • 2. Table of Contents 1. Creating and Using Objects 2. Namespaces 3. Exceptions Handling 4. Strings andText Processing 5. Generics 6. Collection Classes 7. Attributes 2
  • 3. Using Classes and Objects Using the Built-In .NET Framework Classes
  • 4. What is Class?  The formal definition of class: Definition by Google 4 Classes act as templates from which an instance of an object is created at run time. Classes define the properties of the object and the methods used to control the object's behavior.
  • 5. Classes  Classes provide the structure for objects  Define their prototype, act as template  Classes define:  Set of attributes  Represented by fields and properties  Hold their state  Set of actions (behavior)  Represented by methods  A class defines the methods and types of data associated with an object 5
  • 6. Classes – Example 6 Account +Owner: Person +Ammount: double +Suspend() +Deposit(sum:double) +Withdraw(sum:double) Class Name Attributes (Properties and Fields) Operations (Methods)
  • 7. Objects  An object is a concrete instance of a particular class  Creating an object from a class is called instantiation  Objects have state  Set of values associated to their attributes  Example:  Class: Account  Objects: Ivan's account, Peter's account 7
  • 8. Objects – Example 8 Account +Owner: Person +Ammount: double +Suspend() +Deposit(sum:double) +Withdraw(sum:double) Class ivanAccount +Owner="Ivan Kolev" +Ammount=5000.0 peterAccount +Owner="Peter Kirov" +Ammount=1825.33 kirilAccount +Owner="Kiril Kirov" +Ammount=25.0 Object Object Object
  • 9. Classes in C#  Basic units that compose programs  Implementation is encapsulated (hidden)  Classes in C# can contain:  Fields (member variables)  Properties  Methods  Constructors  Inner types  Etc. (events, indexers, operators, …) 9
  • 10. Classes in C# – Examples  Example of classes:  System.Console  System.String (string in C#)  System.Int32 (int in C#)  System.Array  System.Math  System.Random 10
  • 11. Declaring Objects  An instance of a class or structure can be defined like any other variable:  Instances cannot be used if they are not initialized 11 using System; ... // Define two variables of type DateTime DateTime today; DateTime halloween; // Declare and initialize a structure instance DateTime today = DateTime.Now;
  • 12. Fields  Fields are data members of a class  Can be variables and constants  Accessing a field doesn’t invoke any actions of the object  Example:  String.Empty (the "" string) 12
  • 13. Accessing Fields  Constant fields can be only read  Variable fields can be read and modified  Usually properties are used instead of directly accessing variable fields  Examples: 13 // Accessing read-only field String empty = String.Empty; // Accessing constant field int maxInt = Int32.MaxValue;
  • 14. Properties  Properties look like fields (have name and type), but they can contain code, executed when they are accessed  Usually used to control access to data fields (wrappers), but can contain more complex logic  Can have two components (and at least one of them) called accessors  get for reading their value  set for changing their value 14
  • 15. Properties (2)  According to the implemented accessors properties can be:  Read-only (get accessor only)  Read and write (both get and set accessors)  Write-only (set accessor only)  Example of read-only property:  String.Length 15
  • 16. Accessing Properties and Fields – Example 16 using System; ... DateTime christmas = new DateTime(2009, 12, 25); int day = christmas.Day; int month = christmas.Month; int year = christmas.Year; Console.WriteLine( "Christmas day: {0}, month: {1}, year: {2}", day, month, year); Console.WriteLine( "Day of year: {0}", christmas.DayOfYear); Console.WriteLine("Is {0} leap year: {1}", year, DateTime.IsLeapYear(year));
  • 17. Instance and Static Members  Fields, properties and methods can be:  Instance (or object members)  Static (or class members)  Instance members are specific for each object  Example: different dogs have different name  Static members are common for all instances of a class  Example: DateTime.MinValue is shared between all instances of DateTime 17
  • 18. Instance and Static Members – Examples  Example of instance member  String.Length  Each string object has different length  Example of static member  Console.ReadLine()  The console is only one (global for the program)  Reading from the console does not require to create an instance of it 18
  • 19. Methods  Methods manipulate the data of the object to which they belong or perform other tasks  Examples:  Console.WriteLine(…)  Console.ReadLine()  String.Substring(index, length)  Array.GetLength(index) 19
  • 20. Instance Methods  Instance methods manipulate the data of a specified object or perform any other tasks  If a value is returned, it depends on the particular class instance  Syntax:  The name of the instance, followed by the name of the method, separated by dot 20 <object_name>.<method_name>(<parameters>)
  • 21. Calling Instance Methods – Examples  Calling instance methods of String:  Calling instance methods of DateTime: 21 String sampleLower = new String('a', 5); String sampleUpper = sampleLower.ToUpper(); Console.WriteLine(sampleLower); // aaaaa Console.WriteLine(sampleUpper); // AAAAA DateTime now = DateTime.Now; DateTime later = now.AddHours(8); Console.WriteLine("Now: {0}", now); Console.WriteLine("8 hours later: {0}", later);
  • 22. Static Methods  Static methods are common for all instances of a class (shared between all instances)  Returned value depends only on the passed parameters  No particular class instance is available  Syntax:  The name of the class, followed by the name of the method, separated by dot 22 <class_name>.<method_name>(<parameters>)
  • 23. Calling Static Methods – Examples 23 using System; double radius = 2.9; double area = Math.PI * Math.Pow(radius, 2); Console.WriteLine("Area: {0}", area); // Area: 26,4207942166902 double precise = 8.7654321; double round3 = Math.Round(precise, 3); double round1 = Math.Round(precise, 1); Console.WriteLine( "{0}; {1}; {2}", precise, round3, round1); // 8,7654321; 8,765; 8,8 Constant field Static method Static method Static method
  • 24. Constructors  Constructors are special methods used to assign initial values of the fields in an object  Executed when an object of a given type is being created  Have the same name as the class that holds them  Do not return a value  A class may have several constructors with different set of parameters 24
  • 25. Constructors (2)  Constructor is invoked by the new operator  Examples: 25 String s = new String("Hello!"); // s = "Hello!" <instance_name> = new <class_name>(<parameters>) String s = new String('*', 5); // s = "*****" DateTime dt = new DateTime(2009, 12, 30); DateTime dt = new DateTime(2009, 12, 30, 12, 33, 59); Int32 value = new Int32(1024);
  • 26. Structures  Structures are similar to classes  Structures are usually used for storing data structures, without any other functionality  Structures can have fields, properties, etc.  Using methods is not recommended  Structures are value types, and classes are reference types (this will be discussed later)  Example of structure  System.DateTime – represents a date and time 26
  • 27. Enumerations  Enumerations in C# are types whose values are limited to a predefined set of values  E.g. the days of week  Declared by the keyword enum in C#  Hold values from a predefined set 27 public enum Color { Red, Green, Blue, Black } … Color color = Color.Red; Console.WriteLine(color); // Red color = 5; // Compilation error!
  • 28. What is a Namespace?  Namespaces are used to organize the source code into more logical and manageable way  Namespaces can contain  Definitions of classes, structures, interfaces and other types and other namespaces  Namespaces can contain other namespaces, e.g.  System namespace contains Data namespace  The name of the nested namespace is System.Data 28
  • 29. Full Class Names  A full name of a class is the name of the class preceded by the name of its namespace  Example:  Array class, defined in the System namespace  The full name of the class is System.Array 29 <namespace_name>.<class_name>
  • 30. Including Namespaces  The using directive in C#:  Allows using types in a namespace, without specifying their full name  Example: instead of 30 using <namespace_name> using System; DateTime date; System.DateTime date;
  • 31. CommonType System (CTS)  CTS defines all data types supported in .NET Framework  Primitive types (e.g. int, float, object)  Classes (e.g. String, Console, Array)  Structures (e.g. DateTime)  Arrays (e.g. int[], string[,])  Etc.  Object-oriented by design 31
  • 32. CTS and Different Languages  CTS is common for all .NET languages  C#,VB.NET, J#, JScript.NET, ...  CTS type mappings: 32 CTS Type C# Type VB.NET Type System.Int32 int Integer System.Single float Single System.Boolean bool Boolean System.String string String System.Object object Object
  • 33. Value and ReferenceTypes  In CTS there are two categories of types  Value types  Reference types  Placed in different areas of memory  Value types live in the execution stack  Freed when become out of scope  Reference types live in the managed heap (dynamic memory)  Freed by the garbage collector 33
  • 34. Value and Reference Types – Examples  Value types  Most of the primitive types  Structures  Examples: int, float, bool, DateTime  Reference types  Classes and interfaces  Strings  Arrays  Examples: string, Random, object, int[] 34
  • 35. Exceptions Handling The Paradigm of Exceptions in OOP
  • 36. What are Exceptions?  The exceptions in .NET Framework are classic implementation of the OOP exception model  Deliver powerful mechanism for centralized handling of errors and unusual events  Substitute procedure-oriented approach, in which each function returns error code  Simplify code construction and maintenance  Allow the problematic situations to be processed at multiple levels 36
  • 37. Handling Exceptions  In C# the exceptions can be handled by the try-catch-finally construction  catch blocks can be used multiple times to process different exception types 37 try { // Do some work that can raise an exception } catch (SomeException) { // Handle the caught exception }
  • 38. Handling Exceptions – Example 38 static void Main() { string s = Console.ReadLine(); try { Int32.Parse(s); Console.WriteLine( "You entered valid Int32 number {0}.", s); } catch (FormatException) { Console.WriteLine("Invalid integer number!"); } catch (OverflowException) { Console.WriteLine( "The number is too big to fit in Int32!"); } }
  • 39. The System.Exception Class  Exceptions in .NET are objects  The System.Exception class is base for all exceptions in CLR  Holds information for the cause of the error or the unusual situation  Message – text description of the exception  StackTrace – the snapshot of the stack at the moment of exception throwing  InnerException – exception caused the current exception (if any) 39
  • 40. Exception Properties – Example 40 class ExceptionsTest { public static void CauseFormatException() { string s = "an invalid number"; Int32.Parse(s); } static void Main() { try { CauseFormatException(); } catch (FormatException fe) { Console.Error.WriteLine("Exception caught: {0}n{1}", fe.Message, fe.StackTrace); } } }
  • 41. Exception Properties  The Message property gives brief description of the problem  The StackTrace property is extremely useful when identifying the reason caused the exception 41 Exception caught: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Int32.Parse(String s) at ExceptionsTest.CauseFormatException() in c:consoleapplication1exceptionstest.cs:line 8 at ExceptionsTest.Main(String[] args) in c:consoleapplication1exceptionstest.cs:line 15
  • 42. Exception Properties (2)  File names and line numbers are accessible only if the compilation was in Debug mode  When compiled in Release mode, the information in the property StackTrace is quite different: 42 Exception caught: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at ExceptionsTest.Main(String[] args)
  • 43. Exception Hierarchy  Exceptions in .NET Framework are organized in a hierarchy 43
  • 44. Types of Exceptions  All .NET exceptions inherit from System.Exception  The system exceptions inherit from System.SystemException, e.g.  System.ArgumentException  System.NullReferenceException  System.OutOfMemoryException  System.StackOverflowException  User-defined exceptions should inherit from System.ApplicationException 44
  • 45. Handling Exceptions  When catching an exception of a particular class, all its inheritors (child exceptions) are caught too  Example:  Handles ArithmeticException and its successors DivideByZeroException and OverflowException 45 try { // Do some works that can raise an exception } catch (System.ArithmeticException) { // Handle the caught arithmetic exception }
  • 46. Handling All Exceptions  All exceptions thrown by .NET managed code inherit the System.Exception exception  Unmanaged code can throw other exceptions  For handling all exceptions (even unmanaged) use the construction: 46 try { // Do some works that can raise any exception } catch { // Handle the caught exception }
  • 47. Throwing Exceptions  Exceptions are thrown (raised) by throw keyword in C#  Used to notify the calling code in case of error or unusual situation  When an exception is thrown:  The program execution stops  The exception travels over the stack until a suitable catch block is reached to handle it  Unhandled exceptions display error message 47
  • 48. How Exceptions Work? 48 Main() Method 1 Method 2 Method N 2. Method call 3. Method call 4. Method call… Main() Method 1 Method 2 Method N 8. Find handler 7. Find handler 6. Find handler… 5.Throw an exception .NET CLR
  • 49. Using throw Keyword  Throwing an exception with error message:  Exceptions can take message and cause:  Note: if the original exception is not passed the initial cause of the exception is lost 49 throw new ArgumentException("Invalid amount!"); try { Int32.Parse(str); } catch (FormatException fe) { throw new ArgumentException("Invalid number", fe); }
  • 50. Throwing Exceptions – Example 50 public static double Sqrt(double value) { if (value < 0) throw new System.ArgumentOutOfRangeException( "Sqrt for negative numbers is undefined!"); return Math.Sqrt(value); } static void Main() { try { Sqrt(-1); } catch (ArgumentOutOfRangeException ex) { Console.Error.WriteLine("Error: " + ex.Message); throw; } }
  • 52. What Is String?  Strings are sequences of characters  Each character is a Unicode symbol  Represented by the string data type in C# (System.String)  Example: 52 string s = "Hello, C#"; H e l l o , C #s
  • 53. The System.String Class  Strings are represented by System.String objects in .NET Framework  String objects contain an immutable (read-only) sequence of characters  Strings use Unicode in to support multiple languages and alphabets  Strings are stored in the dynamic memory (managed heap)  System.String is reference type 53
  • 54. The System.String Class (2)  String objects are like arrays of characters (char[])  Have fixed length (String.Length)  Elements can be accessed directly by index  The index is in the range [0...Length-1] 54 string s = "Hello!"; int len = s.Length; // len = 6 char ch = s[1]; // ch = 'e' 0 1 2 3 4 5 H e l l o ! index = s[index] =
  • 55. Strings – Example 55 static void Main() { string s = "Stand up, stand up, Balkan Superman."; Console.WriteLine("s = "{0}"", s); Console.WriteLine("s.Length = {0}", s.Length); for (int i = 0; i < s.Length; i++) { Console.WriteLine("s[{0}] = {1}", i, s[i]); } }
  • 56. Declaring Strings  There are two ways of declaring string variables:  Using the C# keyword string  Using the .NET's fully qualified class name System.String  The above three declarations are equivalent 56 string str1; System.String str2; String str3;
  • 57. Creating Strings  Before initializing a string variable has null value  Strings can be initialized by:  Assigning a string literal to the string variable  Assigning the value of another string variable  Assigning the result of operation of type string 57
  • 58. Creating Strings (2)  Not initialized variables has value of null  Assigning a string literal  Assigning from another string variable  Assigning from the result of string operation 58 string s; // s is equal to null string s = "I am a string literal!"; string s2 = s; string s = 42.ToString();
  • 59. Reading and Printing Strings  Reading strings from the console  Use the method Console.ReadLine() 59 string s = Console.ReadLine(); Console.Write("Please enter your name: "); string name = Console.ReadLine(); Console.Write("Hello, {0}! ", name); Console.WriteLine("Welcome to our party!");  Printing strings to the console  Use the methodsWrite() and WriteLine()
  • 60. Comparing Strings  A number of ways exist to compare two strings:  Dictionary-based string comparison  Case-insensitive  Case-sensitive 60 int result = string.Compare(str1, str2, true); // result == 0 if str1 equals str2 // result < 0 if str1 if before str2 // result > 0 if str1 if after str2 string.Compare(str1, str2, false);
  • 61. Comparing Strings – Example  Finding the first string in a lexicographical order from a given list of strings: 61 string[] towns = {"Sofia", "Varna", "Plovdiv", "Pleven", "Bourgas", "Rousse", "Yambol"}; string firstTown = towns[0]; for (int i=1; i<towns.Length; i++) { string currentTown = towns[i]; if (String.Compare(currentTown, firstTown) < 0) { firstTown = currentTown; } } Console.WriteLine("First town: {0}", firstTown);
  • 62. Concatenating Strings  There are two ways to combine strings:  Using the Concat() method  Using the + or the += operators  Any object can be appended to a string 62 string str = String.Concat(str1, str2); string str = str1 + str2 + str3; string str += str1; string name = "Peter"; int age = 22; string s = name + " " + age; //  "Peter 22"
  • 63. Searching in Strings  Finding a character or substring within given string  First occurrence  First occurrence starting at given position  Last occurrence 63 IndexOf(string str) IndexOf(string str, int startIndex) LastIndexOf(string)
  • 64. Searching in Strings – Example 64 string str = "C# Programming Course"; int index = str.IndexOf("C#"); // index = 0 index = str.IndexOf("Course"); // index = 15 index = str.IndexOf("COURSE"); // index = -1 // IndexOf is case-sensetive. -1 means not found index = str.IndexOf("ram"); // index = 7 index = str.IndexOf("r"); // index = 4 index = str.IndexOf("r", 5); // index = 7 index = str.IndexOf("r", 8); // index = 18 0 1 2 3 4 5 6 7 8 9 10 11 12 13 … C # P r o g r a m m i n g … index = s[index] =
  • 65. Extracting Substrings  Extracting substrings  str.Substring(int startIndex, int length)  str.Substring(int startIndex) 65 string filename = @"C:PicsRila2009.jpg"; string name = filename.Substring(8, 8); // name is Rila2009 string filename = @"C:PicsSummer2009.jpg"; string nameAndExtension = filename.Substring(8); // nameAndExtension is Summer2009.jpg 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 C : P i c s R i l a 2 0 0 5 . j p g
  • 66. Splitting Strings  To split a string by given separator(s) use the following method:  Example: 66 string[] Split(params char[]) string listOfBeers = "Amstel, Zagorka, Tuborg, Becks."; string[] beers = listOfBeers.Split(' ', ',', '.'); Console.WriteLine("Available beers are:"); foreach (string beer in beers) { Console.WriteLine(beer); }
  • 67. Replacing and Deleting Substrings  Replace(string, string) – replaces all occurrences of given string with another  The result is new string (strings are immutable)  Remove(index, length) – deletes part of a string and produces a new string as result 67 string cocktail = "Vodka + Martini + Cherry"; string replaced = cocktail.Replace("+", "and"); // Vodka and Martini and Cherry string price = "$ 1234567"; string lowPrice = price.Remove(2, 3); // $ 4567
  • 68. Changing Character Casing  Using method ToLower()  Using method ToUpper() 68 string alpha = "aBcDeFg"; string lowerAlpha = alpha.ToLower(); // abcdefg Console.WriteLine(lowerAlpha); string alpha = "aBcDeFg"; string upperAlpha = alpha.ToUpper(); // ABCDEFG Console.WriteLine(upperAlpha);
  • 69. Trimming White Space  Using method Trim()  Using method Trim(chars)  Using TrimStart() and TrimEnd() 69 string s = " example of white space "; string clean = s.Trim(); Console.WriteLine(clean); string s = " tnHello!!! n"; string clean = s.Trim(' ', ',' ,'!', 'n','t'); Console.WriteLine(clean); // Hello string s = " C# "; string clean = s.TrimStart(); // clean = "C# "
  • 70. Constructing Strings  Strings are immutable  Concat(), Replace(), Trim(), ... return new string, do not modify the old one  Do not use "+" for strings in a loop!  It runs very, very inefficiently (slowly)! 70 public static string DupChar(char ch, int count) { string result = ""; for (int i=0; i<count; i++) result += ch; return result; } Very bad practice. Avoid this!
  • 71. Changing the Contents of a String – StringBuilder  Use the System.Text.StringBuilder class for modifiable strings of characters:  Use StringBuilder if you need to keep adding characters to a string 71 public static string ReverseString(string s) { StringBuilder sb = new StringBuilder(); for (int i = s.Length-1; i >= 0; i--) sb.Append(s[i]); return sb.ToString(); }
  • 72. The StringBuilder Class  StringBuilder keeps a buffer memory, allocated in advance  Most operations use the buffer memory and do not allocate new objects 72 H e l l o , C # !StringBuilder: Length=9 Capacity=15 Capacity used buffer (Length) unused buffer
  • 73. StringBuilder – Example  Extracting all capital letters from a string 73 public static string ExtractCapitals(string s) { StringBuilder result = new StringBuilder(); for (int i = 0; i<s.Length; i++) { if (Char.IsUpper(s[i])) { result.Append(s[i]); } } return result.ToString(); }
  • 74. Method ToString()  All classes have public virtual method ToString()  Returns a human-readable, culture-sensitive string representing the object  Most .NET Framework types have own implementation of ToString()  int, float, bool, DateTime 74 int number = 5; string s = "The number is " + number.ToString(); Console.WriteLine(s); // The number is 5
  • 75. Method ToString(format)  We can apply specific formatting when converting objects to string  ToString(formatString) method 75 int number = 42; string s = number.ToString("D5"); // 00042 s = number.ToString("X"); // 2A // Consider the default culture is Bulgarian s = number.ToString("C"); // 42,00 лв double d = 0.375; s = d.ToString("P2"); // 37,50 %
  • 76. Formatting Strings  The formatting strings are different for the different types  Some formatting strings for numbers:  D – number (for integer types)  C – currency (according to current culture)  E – number in exponential notation  P – percentage  X – hexadecimal number  F – fixed point (for real numbers) 76
  • 77. Method String.Format()  Applies templates for formatting strings  Placeholders are used for dynamic text  Like Console.WriteLine(…) 77 string template = "If I were {0}, I would {1}."; string sentence1 = String.Format( template, "developer", "know C#"); Console.WriteLine(sentence1); // If I were developer, I would know C#. string sentence2 = String.Format( template, "elephant", "weigh 4500 kg"); Console.WriteLine(sentence2); // If I were elephant, I would weigh 4500 kg.
  • 78. Composite Formatting  The placeholders in the composite formatting strings are specified as follows:  Examples: 78 {index[,alignment][:formatString]} double d = 0.375; s = String.Format("{0,10:F5}", d); // s = " 0,37500" int number = 42; Console.WriteLine( "Dec {0:D} = Hex {1:X}", number, number); // Dec 42 = Hex 2A
  • 79. Formatting Dates  Dates use their own formatting strings  d, dd – day (with/without leading zero)  M, MM – month  yy, yyyy – year (2 or 4 digits)  h, hh, m, mm, s, ss – hour, minute, second 79 DateTime now = DateTime.Now; Console.WriteLine( "Now is {0:d.MM.yyyy hh:mm:ss}", now); // Now is 31.11.2009 11:30:32
  • 81. What are Generics?  Generics allow defining parameterized classes that process data of unknown (generic) type  The class can be instantiated with several different particular types  Example: List<T>  List<int> / List<string> / List<Student>  Generics are also known as "parameterized types" or "template types"  Similar to the templates in C++  Similar to the generics in Java 81
  • 82. The List<T> Class  Implements the abstract data structure list using an auto-extensible array  All elements are of the same type T  T can be any type, e.g. List<int>, List<string>, List<DateTime>  Size is dynamically increased as needed  Basic functionality:  Count – returns the number of elements  Add(T) – appends given element at the end 82
  • 83. List<T> – Simple Example 83 static void Main() { List<string> list = new List<string>(); list.Add("C#"); list.Add("Java"); list.Add("PHP"); foreach (string item in list) { Console.WriteLine(item); } // Result: // C# // Java // PHP }
  • 84. List<T> – Functionality  list[index] – access element by index  Insert(index, T) – inserts given element to the list at a specified position  Remove(T) – removes the first occurrence of given element  RemoveAt(index) – removes the element at the specified position  Clear() – removes all elements  Contains(T) – determines whether an element is part of the list 84
  • 85. List<T> – Functionality (2)  IndexOf() – returns the index of the first occurrence of a value in the list (zero-based)  Reverse() – reverses the order of the elements in the list or a portion of it  Sort() – sorts the elements in the list or a portion of it  ToArray() – converts the elements of the list to an array  TrimExcess() – sets the capacity to the actual number of elements 85
  • 86. Primes in an Interval – Example 86 static List<int> FindPrimes(int start, int end) { List<int> primesList = new List<int>(); for (int num = start; num <= end; num++) { bool prime = true; for (int div = 2; div <= Math.Sqrt(num); div++) { if (num % div == 0) { prime = false; break; } } if (prime) { primesList.Add(num); } } return primesList; }
  • 87. The Stack<T> Class  Implements the stack data structure using an array  Elements are of the same type T  T can be any type, e.g. Stack<int>  Size is dynamically increased as needed  Basic functionality:  Push(T) – inserts elements to the stack  Pop() – removes and returns the top element from the stack 87
  • 88. Stack<T> – Example  Using Push(), Pop() and Peek() methods 88 static void Main() { Stack<string> stack = new Stack<string>(); stack.Push("1. Ivan"); stack.Push("2. Nikolay"); stack.Push("3. Maria"); stack.Push("4. George"); Console.WriteLine("Top = {0}", stack.Peek()); while (stack.Count > 0) { string personName = stack.Pop(); Console.WriteLine(personName); } }
  • 89. The Queue<T> Class  Implements the queue data structure using a circular resizable array  Elements are from the same type T  T can be any type, e.g. Stack<int>  Size is dynamically increased as needed  Basic functionality:  Enqueue(T) – adds an element to the end of the queue  Dequeue() – removes and returns the element at the beginning of the queue 89
  • 90. Queue<T> – Example  Using Enqueue() and Dequeue() methods 90 static void Main() { Queue<string> queue = new Queue<string>(); queue.Enqueue("Message One"); queue.Enqueue("Message Two"); queue.Enqueue("Message Three"); queue.Enqueue("Message Four"); while (queue.Count > 0) { string message = queue.Dequeue(); Console.WriteLine(message); } }
  • 91. Dictionary<TKey,TValue> Class  Implements the abstract data type "Dictionary" as hash table  Size is dynamically increased as needed  Contains a collection of key-value pairs arranged by the hash code of the key:  h(key) = value  Collisions are resolved by chaining  Dictionary<TKey,TValue> class relies on  Object.Equals() method for comparing the elements 91
  • 92. Dictionary<TKey,TValue> Class (2)  Object.GetHashCode() method for calculating the hash codes of the elements  Major operations:  Add(TKey,TValue) – adds an element with the specified key and value into the dictionary  Remove(TKey) – removes the element with the specified key  Clear() – removes all elements  this[] – returns element by key 92
  • 93. Dictionary<TKey,TValue> Class (3)  Count – returns the number of elements  ContainsKey(TKey) – determines whether the dictionary contains given key  ContainsValue(TValue) – determines whether the dictionary contains given value  Keys – returns a collection of the keys  Values – returns a collection of the values  TryGetValue(TKey,out TValue) – if the key is found, returns it in the TValue, otherwise returns the default value for the TValue type 93
  • 94. Dictionary<TKey,TValue> – Example 94 Dictionary<string, int> studentsMarks = new Dictionary<string, int>(); studentsMarks.Add("Ivan", 4); studentsMarks.Add("Peter", 6); studentsMarks.Add("Maria", 6); studentsMarks.Add("George", 5); int peterMark = studentsMarks["Peter"]; Console.WriteLine("Peter's mark: {0}", peterMark); Console.WriteLine("Is Peter in the hash table: {0}", studentsMarks.ContainsKey("Peter")); Console.WriteLine("Students and grades:"); foreach (var pair in studentsMarks) { Console.WriteLine("{0} --> {1} ", pair.Key, pair.Value); }
  • 95. Counting Words in GivenText 95 string text = "Welcome to our C# course. In this " + "course you will learn how to write simple " + "programs in C# and Microsoft .NET"; string[] words = text.Split(new char[] {' ', ',', '.'}, StringSplitOptions.RemoveEmptyEntries); var wordsCount = new Dictionary<string, int>(); foreach (string word in words) { if (wordsCount.ContainsKey(word)) wordsCount[word]++; else wordsCount.Add(word, 1); } foreach (var pair in wordsCount) { Console.WriteLine("{0} --> {1}", pair.Key, pair.Value); }
  • 96. BalancedTrees in .NET  Balanced Binary SearchTrees  Ordered binary search trees that have height of log2(n) where n is the number of their nodes  Searching costs about log2(n) comparisons  .NET Framework has built-in implementations of balanced search trees, e.g.:  SortedDictionary<K,V>  Red-black tree based map of key-value pairs  External libraries like "Wintellect Power Collections for .NET" are more flexible 96
  • 97. Sorted Dictionary – Example 97 string text = "Welcome to our C# course. In this " + "course you will learn how to write simple " + "programs in C# and Microsoft .NET"; string[] words = text.Split(new char[] {' ', ',', '.'}, StringSplitOptions.RemoveEmptyEntries); var wordsCount = new SortedDictionary<string, int>(); foreach (string word in words) { if (wordsCount.ContainsKey(word)) wordsCount[word]++; else wordsCount.Add(word, 1); } foreach (var pair in wordsCount) { Console.WriteLine("{0} --> {1}", pair.Key, pair.Value); }
  • 98. Attributes What Attributes Are? How andWhen to UseThem?
  • 99. What Are Attributes?  Attributes are special declarative tags  Used for attaching descriptive information (annotations) to the declarations in the code  At compile time attributes are saved in the assembly's metadata  Can be extracted from the metadata at run- time and can be manipulated by different tools  Instances of classes derived from System.Attribute 99
  • 100. Attributes Applying – Example  Attribute's name is surrounded by square brackets and is placed before the declaration which it refers to:  [Flags] attribute indicates that the enum type can be treated like a set of bit flags 100 [Flags] // System.FlagsAttribute public enum FileAccess { Read = 1, Write = 2, ReadWrite = Read | Write }
  • 101. Attributes With Parameters  Attributes use parameters for initialization:  In this example the [DllImport] attribute is instantiated by the compiler  A System.Runtime.InteropServices. DllImportAttribute object is created, initialized and put into the assembly metadata 101 [DllImport("user32.dll", EntryPoint="MessageBox")] public static extern int ShowMessageBox(int hWnd, string text, string caption, int type); … ShowMessageBox(0, "Some text", "Some caption", 0);
  • 102. C# Language Overview (Part II) Questions? http://schoolacademy.telerik.com

Editor's Notes

  1. 07/16/96
  2. 07/16/96
  3. 07/16/96
  4. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  5. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  6. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  7. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  8. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  9. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  10. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  11. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  12. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  13. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  14. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  15. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  16. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  17. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  18. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  19. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  20. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  21. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
  22. (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*