SlideShare a Scribd company logo
Microsoft Visual C# 2010
       Fourth Edition



        Chapter 4
     Making Decisions
Objectives
• Understand logic-planning tools and decision making
• Learn how to make decisions using the if statement
• Learn how to make decisions using the if-else
  statement
• Use compound expressions in if statements




Microsoft Visual C# 2010: Fourth Edition           2
Objectives (cont'd.)
• Make decisions using the switch statement
• Use the conditional operator
• Use the NOT operator
• Learn to avoid common errors when making
  decisions
• Learn about decision-making issues in GUI
  programs




Microsoft Visual C# 2010: Fourth Edition        3
Understanding Logic-Planning Tools
          and Decision Making
• Pseudocode
    – Tool that helps programmers plan a program’s logic by
      writing plain English statements
• Flowchart
    – You write the steps in diagram form as a series of
      shapes connected by arrows
• Sequence structure
    – One step follows another unconditionally
    – Sometimes, logical steps do not follow in an
      unconditional sequence

Microsoft Visual C# 2010: Fourth Edition                   4
Understanding Logic-Planning Tools
     and Decision Making (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   5
Understanding Logic-Planning Tools
     and Decision Making (cont'd.)
• Decision structure
    – Involves choosing between alternative courses of
      action based on some value within a program
    – All computer decisions are yes-or-no decisions
          • When reduced to their most basic form




Microsoft Visual C# 2010: Fourth Edition                 6
Understanding Logic-Planning Tools
     and Decision Making (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   7
Making Decisions Using the if
                  Statement
• if statement
    – Used to make a single-alternative decision
• Block
    – One or more statements contained within a pair of
      curly braces




Microsoft Visual C# 2010: Fourth Edition                  8
Making Decisions Using the if
              Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   9
Making Decisions Using the if
              Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   10
Making Decisions Using the if
              Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   11
Making Decisions Using the if
              Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   12
Making Decisions Using the if
              Statement (cont'd.)
• Nested if
    – One decision structure is contained within another




Microsoft Visual C# 2010: Fourth Edition                   13
Making Decisions Using the if
              Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   14
Making Decisions Using the if
              Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   15
Making Decisions Using the if-else
              Statement
• Dual-alternative decisions
    – Have two possible outcomes
• if-else statement
    – Used to perform one action when a Boolean
      expression evaluates as true
          • And an alternate action when it evaluates as false




Microsoft Visual C# 2010: Fourth Edition                         16
Making Decisions Using the if-else
         Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   17
Making Decisions Using the if-else
         Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   18
Using Compound Expressions in if
             Statements
• You can combine multiple decisions into a single if
  statement
    – Using a combination of AND and OR operators




Microsoft Visual C# 2010: Fourth Edition            19
Using the Conditional AND Operator

• Conditional AND operator
    – Determines whether two expressions are both true
    – Written as two ampersands (&&)
    – You must include a complete Boolean expression on
      each side of the operator
• Short-circuit evaluation
    – Expressions in each part of an AND expression are
      evaluated only as much as necessary
          • To determine whether the entire expression is true or
            false

Microsoft Visual C# 2010: Fourth Edition                        20
Using the Conditional AND Operator
                (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   21
Using the Conditional OR Operator

• Conditional OR operator
    – Used when you want some action to occur even if only
      one of two conditions is true
    – Written as ||




Microsoft Visual C# 2010: Fourth Edition               22
Using the Conditional OR Operator
                 (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   23
Using the Logical AND and OR
                   Operators
• Boolean logical AND (&) and Boolean logical
  inclusive OR (|) operators
    – Work just like their && and || (conditional AND and
      OR) counterparts
    – They do not support short-circuit evaluation
    – Can lead to a side effect (unintended consequence)
• Avoid writing expressions that contain side effects




Microsoft Visual C# 2010: Fourth Edition                24
Combining AND and OR Operators




Microsoft Visual C# 2010: Fourth Edition   25
Making Decisions Using the switch
               Statement
• switch structure
    – Tests a single variable against a series of exact
      matches
• Keywords
    – switch, case, break, and default
• “No fall through rule”
    – Not allowing code to reach the end of a case
    – Not allowed in C#
    – Use a break statement at the end of each case

Microsoft Visual C# 2010: Fourth Edition                  26
Making Decisions Using the switch
           Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   27
Making Decisions Using the switch
           Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   28
Making Decisions Using the switch
           Statement (cont'd.)
• A switch does not need a default case
    – Good programming practice to include one
• You can use multiple labels to govern a list of
  statements




Microsoft Visual C# 2010: Fourth Edition            29
Making Decisions Using the switch
           Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   30
Using an Enumeration with a switch
             Statement
• Using an enumeration with a switch structure can
  often be convenient




Microsoft Visual C# 2010: Fourth Edition             31
Using an Enumeration with a switch
          Statement (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   32
Using the Conditional Operator

• Conditional operator
    – Used as an abbreviated version of the if-else
      statement
    – A ternary operator
• Syntax
          testExpression ? trueResult : falseResult;




Microsoft Visual C# 2010: Fourth Edition               33
Using the NOT Operator

• NOT operator
    – Written as an exclamation point (!)
    – Negates the result of any Boolean expression




Microsoft Visual C# 2010: Fourth Edition             34
Avoiding Common Errors When
                Making Decisions
• Most frequent errors include:
    – Using the assignment operator instead of the
      comparison operator
    – Inserting a semicolon after the Boolean expression in
      an if statement
    – Failing to block a set of statements with curly braces
    – Failing to include a complete Boolean expression on
      each side of an && or || operator



Microsoft Visual C# 2010: Fourth Edition                   35
Performing Accurate and Efficient
               Range Checks
• Range check
    – A series of if statements that determine whether a
      value falls within a specified range
• Problem




Microsoft Visual C# 2010: Fourth Edition                   36
Performing Accurate and Efficient
           Range Checks (cont'd.)
• Solution
          if(saleAmount >= 1000)
             commissionRate = 0.08;
          else if(saleAmount >= 500)
             commissionRate = 0.06;
          else commissionRate = 0.05;




Microsoft Visual C# 2010: Fourth Edition   37
Using && and II Appropriately

• Problem
    – Print an error message when an employee’s hourly
      pay rate is under $5.65 and when an employee’s
      hourly pay rate is over $60
• Solution
          if(payRate < 5.65 || payRate > 60)
             Console.WriteLine (“Error in pay rate”);




Microsoft Visual C# 2010: Fourth Edition                 38
Using the ! Operator Correctly

• Problem
    – Make sure that if the sales code is not ‘A’ or ‘B’, the
      customer gets a 10% discount
• Solutions
          if(salesCode != ‘A’ && salesCode != ‘B’)
             discount = 0.10;

          if(!(salesCode == ‘A’ || salesCode == ‘B’))
             discount = 0.10;




Microsoft Visual C# 2010: Fourth Edition                        39
Decision-Making Issues in GUI
                    Programs
• Making a decision within a method in a GUI
  application is no different from making one in a
  console application
• You can use if, if…else, and switch
  statements in the same ways




Microsoft Visual C# 2010: Fourth Edition             40
Decision-Making Issues in GUI
                Programs (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   41
Decision-Making Issues in GUI
                Programs (cont'd.)




Microsoft Visual C# 2010: Fourth Edition   42
You Do It

• Activities to explore
    – Using if-else Statements
    – Using AND and OR Logic




Microsoft Visual C# 2010: Fourth Edition         43
Summary

• A flowchart is a pictorial tool that helps you
  understand a program’s logic
• You use an if statement to make a single-
  alternative decision
• When you make a dual-alternative decision, you
  can use an if-else statement
• Conditional AND operator determines whether two
  expressions are both true
• Use the conditional OR operator when you want
  some action to occur when one or both of two
  conditions are true
Microsoft Visual C# 2010: Fourth Edition            44
Summary (cont'd.)

• AND operators take precedence
• The switch statement tests a single variable
  against a series of exact matches
• The conditional operator is used as an abbreviated
  version of the if-else statement
• You use the NOT operator to negate the result of
  any Boolean expression
• Common errors when making decisions
• Decisions within GUI methods are just like ones in
  console applications
Microsoft Visual C# 2010: Fourth Edition               45

More Related Content

PPT
Csc153 chapter 03
 
PPT
Csc153 chapter 07
 
PPT
Csc153 chapter 01
 
PPT
Csc153 chapter 08
 
PPT
Csc253 chapter 09
 
PPT
Csc153 chapter 02
 
PPT
Csc153 chapter 05
 
PPT
Csc153 chapter 06
 
Csc153 chapter 03
 
Csc153 chapter 07
 
Csc153 chapter 01
 
Csc153 chapter 08
 
Csc253 chapter 09
 
Csc153 chapter 02
 
Csc153 chapter 05
 
Csc153 chapter 06
 

What's hot (20)

PPT
Chapter 4 5
PPT
Lecture 5
PDF
Solutions manual for c++ programming from problem analysis to program design ...
PPT
Chap02
PPT
9781285852744 ppt ch02
PPTX
JavaScript functions
PPT
Chapter2
PPT
Computer Programming
PPT
Operators and Expressions in C#
PPT
Functions ppt ch06
PPT
9781285852744 ppt ch12
PDF
Intake 38_1
DOC
C notes by m v b reddy(gitam)imp notes all units notes 5 unit order
DOC
Programming in c notes
PPT
Literals,variables,datatype in C#
PPT
9781439035665 ppt ch06
PPT
Testing Model Transformations
PPT
9781285852744 ppt ch13
PPTX
Lesson 13 object and class
DOC
Course Breakup Plan- C
Chapter 4 5
Lecture 5
Solutions manual for c++ programming from problem analysis to program design ...
Chap02
9781285852744 ppt ch02
JavaScript functions
Chapter2
Computer Programming
Operators and Expressions in C#
Functions ppt ch06
9781285852744 ppt ch12
Intake 38_1
C notes by m v b reddy(gitam)imp notes all units notes 5 unit order
Programming in c notes
Literals,variables,datatype in C#
9781439035665 ppt ch06
Testing Model Transformations
9781285852744 ppt ch13
Lesson 13 object and class
Course Breakup Plan- C
Ad

Similar to Csc153 chapter 04 (20)

PPT
C# Tutorial MSM_Murach chapter-01-slides
PDF
Refinery Blending Problems by Engr. Adefami Olusegun
PPT
First draft programming c++
PDF
DevOpsDays LA - Platform Engineers are Product Managers.pdf
PDF
Using_PTC_Windchill_and_Creo_for_Creating_Customer-Driven_Product_Variants
PDF
0-Slot05-06-07-Basic-Logics.pdf
PDF
UoN-Lec_12_Control_Structure.pdf
PPT
Devry cis-170-c-i lab-6-of-7-menu
PPT
Devry cis-170-c-i lab-6-of-7-menu
PDF
Systematic error management - we ported rudder to zio
PPT
Chapter 01.PPT
PPTX
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
PPTX
The Business side of a Software Architect - SATURN
PPTX
COM1407: Structured Program Development
PDF
Keeping code clean
PPTX
Rdlc (1)
PPTX
Branching and Merging Practices
PDF
Fundamental of Programming Language UNIT-I
PPTX
Tech Ed09 Net Best Practices Bijoy New
PDF
Top Tips Every Notes Developer Needs To Know
C# Tutorial MSM_Murach chapter-01-slides
Refinery Blending Problems by Engr. Adefami Olusegun
First draft programming c++
DevOpsDays LA - Platform Engineers are Product Managers.pdf
Using_PTC_Windchill_and_Creo_for_Creating_Customer-Driven_Product_Variants
0-Slot05-06-07-Basic-Logics.pdf
UoN-Lec_12_Control_Structure.pdf
Devry cis-170-c-i lab-6-of-7-menu
Devry cis-170-c-i lab-6-of-7-menu
Systematic error management - we ported rudder to zio
Chapter 01.PPT
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
The Business side of a Software Architect - SATURN
COM1407: Structured Program Development
Keeping code clean
Rdlc (1)
Branching and Merging Practices
Fundamental of Programming Language UNIT-I
Tech Ed09 Net Best Practices Bijoy New
Top Tips Every Notes Developer Needs To Know
Ad

Recently uploaded (20)

PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Electronic commerce courselecture one. Pdf
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Spectroscopy.pptx food analysis technology
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
KodekX | Application Modernization Development
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
sap open course for s4hana steps from ECC to s4
Electronic commerce courselecture one. Pdf
Machine learning based COVID-19 study performance prediction
Spectroscopy.pptx food analysis technology
The Rise and Fall of 3GPP – Time for a Sabbatical?
Spectral efficient network and resource selection model in 5G networks
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
KodekX | Application Modernization Development
MIND Revenue Release Quarter 2 2025 Press Release
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Dropbox Q2 2025 Financial Results & Investor Presentation
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Network Security Unit 5.pdf for BCA BBA.
Unlocking AI with Model Context Protocol (MCP)
How UI/UX Design Impacts User Retention in Mobile Apps.pdf

Csc153 chapter 04

  • 1. Microsoft Visual C# 2010 Fourth Edition Chapter 4 Making Decisions
  • 2. Objectives • Understand logic-planning tools and decision making • Learn how to make decisions using the if statement • Learn how to make decisions using the if-else statement • Use compound expressions in if statements Microsoft Visual C# 2010: Fourth Edition 2
  • 3. Objectives (cont'd.) • Make decisions using the switch statement • Use the conditional operator • Use the NOT operator • Learn to avoid common errors when making decisions • Learn about decision-making issues in GUI programs Microsoft Visual C# 2010: Fourth Edition 3
  • 4. Understanding Logic-Planning Tools and Decision Making • Pseudocode – Tool that helps programmers plan a program’s logic by writing plain English statements • Flowchart – You write the steps in diagram form as a series of shapes connected by arrows • Sequence structure – One step follows another unconditionally – Sometimes, logical steps do not follow in an unconditional sequence Microsoft Visual C# 2010: Fourth Edition 4
  • 5. Understanding Logic-Planning Tools and Decision Making (cont'd.) Microsoft Visual C# 2010: Fourth Edition 5
  • 6. Understanding Logic-Planning Tools and Decision Making (cont'd.) • Decision structure – Involves choosing between alternative courses of action based on some value within a program – All computer decisions are yes-or-no decisions • When reduced to their most basic form Microsoft Visual C# 2010: Fourth Edition 6
  • 7. Understanding Logic-Planning Tools and Decision Making (cont'd.) Microsoft Visual C# 2010: Fourth Edition 7
  • 8. Making Decisions Using the if Statement • if statement – Used to make a single-alternative decision • Block – One or more statements contained within a pair of curly braces Microsoft Visual C# 2010: Fourth Edition 8
  • 9. Making Decisions Using the if Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 9
  • 10. Making Decisions Using the if Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 10
  • 11. Making Decisions Using the if Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 11
  • 12. Making Decisions Using the if Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 12
  • 13. Making Decisions Using the if Statement (cont'd.) • Nested if – One decision structure is contained within another Microsoft Visual C# 2010: Fourth Edition 13
  • 14. Making Decisions Using the if Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 14
  • 15. Making Decisions Using the if Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 15
  • 16. Making Decisions Using the if-else Statement • Dual-alternative decisions – Have two possible outcomes • if-else statement – Used to perform one action when a Boolean expression evaluates as true • And an alternate action when it evaluates as false Microsoft Visual C# 2010: Fourth Edition 16
  • 17. Making Decisions Using the if-else Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 17
  • 18. Making Decisions Using the if-else Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 18
  • 19. Using Compound Expressions in if Statements • You can combine multiple decisions into a single if statement – Using a combination of AND and OR operators Microsoft Visual C# 2010: Fourth Edition 19
  • 20. Using the Conditional AND Operator • Conditional AND operator – Determines whether two expressions are both true – Written as two ampersands (&&) – You must include a complete Boolean expression on each side of the operator • Short-circuit evaluation – Expressions in each part of an AND expression are evaluated only as much as necessary • To determine whether the entire expression is true or false Microsoft Visual C# 2010: Fourth Edition 20
  • 21. Using the Conditional AND Operator (cont'd.) Microsoft Visual C# 2010: Fourth Edition 21
  • 22. Using the Conditional OR Operator • Conditional OR operator – Used when you want some action to occur even if only one of two conditions is true – Written as || Microsoft Visual C# 2010: Fourth Edition 22
  • 23. Using the Conditional OR Operator (cont'd.) Microsoft Visual C# 2010: Fourth Edition 23
  • 24. Using the Logical AND and OR Operators • Boolean logical AND (&) and Boolean logical inclusive OR (|) operators – Work just like their && and || (conditional AND and OR) counterparts – They do not support short-circuit evaluation – Can lead to a side effect (unintended consequence) • Avoid writing expressions that contain side effects Microsoft Visual C# 2010: Fourth Edition 24
  • 25. Combining AND and OR Operators Microsoft Visual C# 2010: Fourth Edition 25
  • 26. Making Decisions Using the switch Statement • switch structure – Tests a single variable against a series of exact matches • Keywords – switch, case, break, and default • “No fall through rule” – Not allowing code to reach the end of a case – Not allowed in C# – Use a break statement at the end of each case Microsoft Visual C# 2010: Fourth Edition 26
  • 27. Making Decisions Using the switch Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 27
  • 28. Making Decisions Using the switch Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 28
  • 29. Making Decisions Using the switch Statement (cont'd.) • A switch does not need a default case – Good programming practice to include one • You can use multiple labels to govern a list of statements Microsoft Visual C# 2010: Fourth Edition 29
  • 30. Making Decisions Using the switch Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 30
  • 31. Using an Enumeration with a switch Statement • Using an enumeration with a switch structure can often be convenient Microsoft Visual C# 2010: Fourth Edition 31
  • 32. Using an Enumeration with a switch Statement (cont'd.) Microsoft Visual C# 2010: Fourth Edition 32
  • 33. Using the Conditional Operator • Conditional operator – Used as an abbreviated version of the if-else statement – A ternary operator • Syntax testExpression ? trueResult : falseResult; Microsoft Visual C# 2010: Fourth Edition 33
  • 34. Using the NOT Operator • NOT operator – Written as an exclamation point (!) – Negates the result of any Boolean expression Microsoft Visual C# 2010: Fourth Edition 34
  • 35. Avoiding Common Errors When Making Decisions • Most frequent errors include: – Using the assignment operator instead of the comparison operator – Inserting a semicolon after the Boolean expression in an if statement – Failing to block a set of statements with curly braces – Failing to include a complete Boolean expression on each side of an && or || operator Microsoft Visual C# 2010: Fourth Edition 35
  • 36. Performing Accurate and Efficient Range Checks • Range check – A series of if statements that determine whether a value falls within a specified range • Problem Microsoft Visual C# 2010: Fourth Edition 36
  • 37. Performing Accurate and Efficient Range Checks (cont'd.) • Solution if(saleAmount >= 1000) commissionRate = 0.08; else if(saleAmount >= 500) commissionRate = 0.06; else commissionRate = 0.05; Microsoft Visual C# 2010: Fourth Edition 37
  • 38. Using && and II Appropriately • Problem – Print an error message when an employee’s hourly pay rate is under $5.65 and when an employee’s hourly pay rate is over $60 • Solution if(payRate < 5.65 || payRate > 60) Console.WriteLine (“Error in pay rate”); Microsoft Visual C# 2010: Fourth Edition 38
  • 39. Using the ! Operator Correctly • Problem – Make sure that if the sales code is not ‘A’ or ‘B’, the customer gets a 10% discount • Solutions if(salesCode != ‘A’ && salesCode != ‘B’) discount = 0.10; if(!(salesCode == ‘A’ || salesCode == ‘B’)) discount = 0.10; Microsoft Visual C# 2010: Fourth Edition 39
  • 40. Decision-Making Issues in GUI Programs • Making a decision within a method in a GUI application is no different from making one in a console application • You can use if, if…else, and switch statements in the same ways Microsoft Visual C# 2010: Fourth Edition 40
  • 41. Decision-Making Issues in GUI Programs (cont'd.) Microsoft Visual C# 2010: Fourth Edition 41
  • 42. Decision-Making Issues in GUI Programs (cont'd.) Microsoft Visual C# 2010: Fourth Edition 42
  • 43. You Do It • Activities to explore – Using if-else Statements – Using AND and OR Logic Microsoft Visual C# 2010: Fourth Edition 43
  • 44. Summary • A flowchart is a pictorial tool that helps you understand a program’s logic • You use an if statement to make a single- alternative decision • When you make a dual-alternative decision, you can use an if-else statement • Conditional AND operator determines whether two expressions are both true • Use the conditional OR operator when you want some action to occur when one or both of two conditions are true Microsoft Visual C# 2010: Fourth Edition 44
  • 45. Summary (cont'd.) • AND operators take precedence • The switch statement tests a single variable against a series of exact matches • The conditional operator is used as an abbreviated version of the if-else statement • You use the NOT operator to negate the result of any Boolean expression • Common errors when making decisions • Decisions within GUI methods are just like ones in console applications Microsoft Visual C# 2010: Fourth Edition 45