Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov...

101
C# Language Overview (Part II) Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation www.telerik. com

Transcript of Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov...

Page 1: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

C# Language Overview

(Part II)Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes

Svetlin NakovTelerik

Corporationwww.telerik.com

Page 2: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Table of Contents

1.Creating and Using Objects

2.Exceptions Handling

3.Strings and Text Processing

4.Generics

5.Collection Classes

6.Attributes

2

Page 3: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Using Classes and ObjectsUsing the Standard .NET Framework

Classes

Page 4: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

What is Class? The formal definition of class:

Definition by Google

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.

4

Page 5: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 6: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Classes – Example

Account

+Owner: Person+Ammount: double

+Suspend()+Deposit(sum:double)+Withdraw(sum:double)

Class Name

Attributes

(Properties and Fields)

Operations

(Methods)

6

Page 7: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

account7

Page 8: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Objects – Example

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

8

Page 9: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 10: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 11: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

using System;...// Define two variables of type DateTimeDateTime today; DateTime halloween;

// Declare and initialize a structure instanceDateTime today = DateTime.Now;

11

Page 12: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 13: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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:

// Accessing read-only fieldString empty = String.Empty;

// Accessing constant fieldint maxInt = Int32.MaxValue;

13

Page 14: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 15: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 16: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Accessing Properties and Fields – Example

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)); 16

Page 17: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 18: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 19: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 20: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

<object_name>.<method_name>(<parameters>)

20

Page 21: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Calling Instance Methods – Examples

Calling instance methods of String:

Calling instance methods of DateTime:

String sampleLower = new String('a', 5);String sampleUpper = sampleLower.ToUpper();

Console.WriteLine(sampleLower); // aaaaaConsole.WriteLine(sampleUpper); // AAAAA

DateTime now = DateTime.Now;DateTime later = now.AddHours(8);

Console.WriteLine("Now: {0}", now);Console.WriteLine("8 hours later: {0}", later);

21

Page 22: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

<class_name>.<method_name>(<parameters>)

22

Page 23: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Calling Static Methods – Examples

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 metho

d

Static meth

odStatic meth

od

23

Page 24: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 25: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Constructors (2) Constructor is invoked by the new operator

Examples:

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);

25

Page 26: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

Page 27: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

For example: System namespace contains Data

namespace The name of the nested namespace

is System.Data

27

Page 28: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

<namespace_name>.<class_name>

28

Page 29: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Including Namespaces The using directive in C#:

Allows using types in a namespace, without specifying their full name

Example:

instead of

using <namespace_name>

using System;DateTime date;

System.DateTime date;

29

Page 30: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Common Type 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 design30

Page 31: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

CTS and Different Languages

CTS is common for all .NET languages C#, VB.NET, J#, JScript.NET, ...

CTS type mappings:

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

31

Page 32: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Value and Reference Types

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

32

Page 33: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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[] 33

Page 34: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Exceptions HandlingThe Paradigm of Exceptions in

OOP

Page 35: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

35

Page 36: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

try{ // Do some work that can raise an exception}catch (SomeException){ // Handle the caught exception}

36

Page 37: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Handling Exceptions – Example

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!"); }}

37

Page 38: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

The System.Exception Class

Exceptions in .NET are objects The System.Exception class is base for all exceptions in CLR Contains 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 currentexception (if any)

38

Page 39: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Exception Properties – Example

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); } }}

39

Page 40: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Exception Properties The Message property gives brief description of the problem The StackTrace property is extremely useful when identifying the reason caused the exception

The Message property gives brief description of the problem The StackTrace property is extremely useful when identifying the reason caused the exception

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:\consoleapplication1\exceptionstest.cs:line 8 at ExceptionsTest.Main(String[] args) in c:\consoleapplication1\exceptionstest.cs:line 15

40

Page 41: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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:

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:

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)

41

Page 42: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Exceptions in .NET Framework are organized in a hierarchy

Exception Hierarchy

System.Exception

System.SystemException System.ApplicationException

System.NullReferenceException System.FormatException

System.ArithmeticException

System.DivideByZeroException System.OverflowException

SofiaUniversity.InvalidStudentException

42

Page 43: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

43

Page 44: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

try{ // Do some works that can raise an exception}catch (System.ArithmeticException){ // Handle the caught arithmetic exception}

44

Page 45: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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:try{ // Do some works that can raise any exception}catch{ // Handle the caught exception}

45

Page 46: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

46

Page 47: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

How Exceptions Work?

47

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

1. Execute theprogram 9. Find handler

10. Display error message

Page 48: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

throw new ArgumentException("Invalid amount!");

try{ Int32.Parse(str);}catch (FormatException fe){ throw new ArgumentException("Invalid number", fe);}

48

Page 49: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Throwing Exceptions – Example

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; }}

49

Page 50: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Strings and Text Processing

Page 51: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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:

string s = "Hello, C#";

H e l l o , C #s

51

Page 52: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

52

Page 53: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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]

string s = "Hello!";int len = s.Length; // len = 6char ch = s[1]; // ch = 'e'

0 1 2 3 4 5

H e l l o !index =

s[index] =

53

Page 54: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Strings – Example

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]); }}

54

Page 55: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

string str1;System.String str2;String str3;

55

Page 56: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

56

Page 57: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

string s; // s is equal to null

string s = "I am a string literal!";

string s2 = s;

string s = 42.ToString();

57

Page 58: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Reading and Printing Strings

Reading strings from the console Use the method Console.ReadLine()

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 methods Write() and

WriteLine()

58

Page 59: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

A number of ways exist to compare two strings: Dictionary-based string comparison

Case-insensitive

Case-sensitive

Comparing Strings

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);

59

Page 60: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Comparing Strings – Example

Finding the first string in a lexicographical order from a given list of strings:

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);

60

Page 61: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Concatenating Strings

There are two ways to combine strings: Using the Concat() method

Using the + or the += operators

Any object can be appended to string

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"

61

Page 62: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Searching in Strings

Finding a character or substring within given string First occurrence

First occurrence starting at given position

Last occurrence

IndexOf(string str)

IndexOf(string str, int startIndex)

LastIndexOf(string)

62

Page 63: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Searching in Strings – Example

string str = "C# Programming Course";int index = str.IndexOf("C#"); // index = 0index = str.IndexOf("Course"); // index = 15index = str.IndexOf("COURSE"); // index = -1// IndexOf is case-sensetive. -1 means not foundindex = str.IndexOf("ram"); // index = 7index = str.IndexOf("r"); // index = 4index = str.IndexOf("r", 5); // index = 7index = 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] =

63

Page 64: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Extracting Substrings Extracting substrings

str.Substring(int startIndex, int length)

str.Substring(int startIndex)

string filename = @"C:\Pics\Rila2009.jpg";string name = filename.Substring(8, 8);// name is Rila2009

string filename = @"C:\Pics\Summer2009.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

64

Page 65: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Splitting Strings To split a string by given separator(s) use the following method:

Example:

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);}

65

Page 66: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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 new string as resultstring cocktail = "Vodka + Martini + Cherry";string replaced = cocktail.Replace("+", "and");// Vodka and Martini and Cherry

string price = "$ 1234567";string lowPrice = price.Remove(2, 3);// $ 4567

66

Page 67: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Changing Character Casing

Using method ToLower()

Using method ToUpper()string alpha = "aBcDeFg";string lowerAlpha = alpha.ToLower(); // abcdefgConsole.WriteLine(lowerAlpha);

string alpha = "aBcDeFg";string upperAlpha = alpha.ToUpper(); // ABCDEFGConsole.WriteLine(upperAlpha);

67

Page 68: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Trimming White Space Using method Trim()

Using method Trim(chars)

Using TrimStart() and TrimEnd()

string s = " example of white space ";string clean = s.Trim();Console.WriteLine(clean);

string s = " \t\nHello!!! \n";string clean = s.Trim(' ', ',' ,'!', '\n','\t');Console.WriteLine(clean); // Hello

string s = " C# ";string clean = s.TrimStart(); // clean = "C# "

68

Page 69: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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!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! 69

Page 70: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

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();}

70

Page 71: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

StringBuilder keeps a buffer memory, allocated in advance Most operations use the buffer

memory and do not allocate new objects

The StringBuilder Class

H e l l o , C # !StringBuilder:

Length=9Capacity=15

Capacity

used buffer(Length)

unused buffer

71

Page 72: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

StringBuilder – Example

Extracting all capital letters from a string

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();}

72

Page 73: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

int number = 5;string s = "The number is " + number.ToString();Console.WriteLine(s); // The number is 5

73

Page 74: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Method ToString(format)

We can apply specific formatting when converting objects to string ToString(formatString) method

int number = 42;string s = number.ToString("D5"); // 00042

s = number.ToString("X"); // 2A

// Consider the default culture is Bulgarians = number.ToString("C"); // 42,00 лв

double d = 0.375;s = d.ToString("P2"); // 37,50 %

74

Page 75: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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)

75

Page 76: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Method String.Format()

Applies templates for formatting strings Placeholders are used for dynamic

text Like Console.WriteLine(…)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.

76

Page 77: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Composite Formatting The placeholders in the composite formatting strings are specified as follows:

Examples:

{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

77

Page 78: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Formatting Dates Dates have 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

DateTime now = DateTime.Now;Console.WriteLine( "Now is {0:d.MM.yyyy HH:mm:ss}", now);// Now is 31.11.2009 11:30:32

78

Page 79: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Collection ClassesLists, Trees, Dictionaries

Page 80: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

80

Page 81: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

The List<T> Class Implements the abstract data structure list using an 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

81

Page 82: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

List<T> – Simple Example

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}

82

Page 83: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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 list83

Page 84: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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 84

Page 85: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Primes in an Interval – Example

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;} 85

Page 86: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

86

Page 87: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Stack<T> – Example Using Push(), Pop() and Peek() methods

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); }}

87

Page 88: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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 theend of the queue

Dequeue() – removes and returns the element at the beginning of the queue

88

Page 89: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Queue<T> – Example Using Enqueue() and Dequeue()

methodsstatic 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); }}

89

Page 90: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Dictionary<TKey,TValue> Class

Implements the abstract data type "Dictionary" as hash table Size is dynamically increased as

needed Contains a collection of key-and-

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 elements

90

Page 91: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

91

Page 92: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

92

Page 93: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Dictionary<TKey,Tvalue> – Example

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);}

93

Page 94: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Counting Words in Given Text

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);}

94

Page 95: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Balanced Trees in .NET Balanced Binary Search Trees

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

95

Page 96: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Sorted Dictionary – Example

96

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);}

Page 97: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

AttributesWhat They Are? How and When to Use Them?

Page 98: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

What Are Attributes? Special declarative tags 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 and can be manipulated by different tools Instances of classes derived from System.Attribute

98

Page 99: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

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

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

Attributes Applying – Example

[Flags] // System.FlagsAttributepublic enum FileAccess { Read = 1, Write = 2, ReadWrite = Read | Write}

99

Page 100: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

Attributes use parameters for initialization:

In the example the [DllImport] attribute is instantiated by the compiler as follows: An object of System.Runtime. InteropServices.DllImportAttribute class is created and initialized

Attributes With Parameters

[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);

100

Page 101: Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation .

C# Language Overview(Part II)

Questions? ??

? ? ???

?

?

http://academy.telerik.com