neal stublen [email protected]. tonight’s agenda c# data types control structures methods and...

80
C#: INTRODUCTION FOR DEVELOPERS Neal Stublen [email protected]

Upload: sibyl-horn

Post on 26-Dec-2015

215 views

Category:

Documents


1 download

TRANSCRIPT

C#: INTRODUCTION

FOR DEVELOPERS

Neal Stublen

[email protected]

Tonight’s Agenda

C# data types Control structures Methods and event handlers Exceptions and validation Q&A

C# DATA TYPES

Built-in Types Integer Types

byte, sbyte, short, ushort, int, uint, long, ulong Floating Point Types

float, double, decimal Character Type

char (2 bytes!) Boolean Type

bool (true or false)

Aliases for .NET data types (Byte, Integer, Decimal, etc.)

Declare and Initialize

<type> <variableName>;int index;float interestRate;

<type> <variableName> = <value>;int index = 0;float interestRate = 0.0005;

Constants

const <type> <variableName> = <value>;

const decimal PI = 3.1415926535897932384626;PI = 3.14; // error!!

Naming Conventions

Camel Notation (camel-case)salesTaxCommon for variables

Pascal Notation (title-case)SalesTaxCommon for type names and constants

C or Python stylesales_tax (variables)SALES_TAX (constants)Not common

Arithmetic Operators

Addition (+) Subtraction (-) Multiplication (*) Division (/) Modulus (%) Increment (++)

value++ or ++value Decrement (--)

value-- or --value

Prefix and Postfix Operators Prefix operators modify a variable before it is evaluated Postfix operators modify a variable after it is evaluated

y = 1; x = y++;

// y = 2

// x = 1 (y was incremented AFTER evaluation)

y = 1; x = ++y;

// y = 2

// x = 2 (y was incremented BEFORE evaluation)

Assignment Operators

Assignment (=) Addition (+=)

x = x + y → x += y Subtraction (-=) Multiplication (*=) Division (/=) Modulus (%=)

Order of Precedence

Increment, decrementPrefix versions

Negation Multiplication, division, modulus Addition, subtraction

Evaluate from left to right Evaluate innermost parentheses first

What Should Happen?

int i = (54 – 15) / 13 - 7;

int i = 39 / 13 - 7;

= 3 - 7;

= -4;

What Should Happen?

int i = a++ * 4 – b;

int i = (a * 4) - b;a = a + 1;

What Should Happen?

int i = ++a * 4 – b;

a = a + 1;int i = (a * 4) - b;

INTRODUCING LINQPAD

"Advanced" Math Operations

The Math class provides a set of methods for common math operations

totalDollars = Math.Round(totalDollars, 2); Rounds to nearest whole number

hundred = Math.Pow(10, 2); ten = Math.Sqrt(100); one = Math.Min(1, 2); two = Math.Max(1, 2);

String Declarations// Simple declarationstring text;

// Initial value (double quotes)string text = "Hello!";

// Empty stringstring text = "";

// Unknown value (not an empty string)string text = null;

String Concatenationstring text = "My name is ";text = text + "Neal"text += " Stublen.“

string first = "Neal";string last = "Stublen";string greeting = “Hi, " + first + " " + last;

double grade = 94;string text = "My grade is " + grade + ".";

Special String Characters Escape sequence New line ("\n") Tab ("\t") Return ("\r") Quotation ("\"") Backslash ("\\") filename = "c:\\dev\\projects"; quote = "He said, \"Yes.\""; filename = @"c:\dev\projects"; quote = @"He said, ""Yes.""";

CONVERTING BETWEEN DATA TYPES

Type Casting

ImplicitLess precise to more precise

byte->short->int->long->double Automatic casting to more precise types

int letter = 'A';int test = 96, hmwrk = 84;double avg = tests * 0.8 + hmwrk * 0.2;

Type Casting

ExplicitMore precise to less precise

int->char, double->float Must be specified to avoid compiler

errors(<type>) <expression>

double total = 4.56;int avg = (int)(total / 10);decimal decValue = (decimal)avg;

What Should Happen?

int i = 379;double d = 4.3;byte b = 2;

double d2 = i * d / b;

int i2 = i * d / b;

Converting Types To Strings Everything has a ToString() method

<value>.ToString();

int i = 5;string s = i.ToString();// s = "5“

double d = 5.3;string s = d.ToString();// s = "5.3"

Converting Strings To Types Use the data type’s Parse() method

<type>.Parse(<string>);○ decimal m = Decimal.Parse("5.3");

Use the Convert classConvert.ToInt32(<value>);

○ int i = Convert.ToInt32("Convert.ToBool(<value>);Convert.ToString(<value>);...

Formatted Strings

Formatting codes can customize the output of ToString()<value>.ToString(<formatString>);amount.ToString("c"); // $43.16rate.ToString("p1"); // 3.4%count.ToString("n0"); // 2,345

See p. 121 for formatting codes

Formatted Strings

String class provides a static Format method{index:formatCode}String.Format("{0:c}", 43.16);

○ // $43.16String.Format("{0:p1}", 0.034);

○ // 3.4%

Formatted Strings

String.Format("Look: {0:c}, {1:p1}",43.16, 0.034);

// Look: $43.16, 3.4% String.Format(

“{0}, your score is {1}.",name, score);

// John, your score is 34.

Variable Scope

Scope limits access and lifetime Class scope Method scope Block scope No officially "global" scope

Enumeration Types

Enumerations define types with a fixed number of values

enum StoplightColors{    Red,    Yellow,    Green}

Enumeration Type

Numeric values are implied for each enumerated value

enum StoplightColors{    Red = 10,    Yellow,    Green}

Enumeration Type

enum StoplightColors{    Red = 10,    Yellow = 20,    Green = 30}

Enumeration Typeenum StoplightColors{    Red = 10}

string color =

  StoplightColors.Red.ToString();

// color = "Red", not "10"

"null" Values Identifies an unknown value

string text = null;

int value = null; // error! int? nonValue = null; bool defined = nonValue.HasValue; int value = nonValue.Value;

decimal? price1 = 19.95m; decimal? price2 = null; decimal? total = price1 + price2;

total = null (unknown, which seems intuitive)

INVOICE TOTAL ENHANCEMENTS

Form Enhancements

Display a formatted subtotal as a currency

Round the discount amount to two decimal places

Keep running invoice totals Reset the totals when the

button is clicked Chapter 4 exercises

CHAPTER 5

CONTROL STRUCTURES

Common Control Structures Boolean expressions

Evaluate to true or false Conditional statements

Conditional execution Loops

Repeated execution

Boolean Expressions Equality (==)

a == b Inequality (!=)

a != b Greater than (>)

a > b Less than (<)

a < b Greater than or equal (>=)

a >= b Less than (<=)

a <= b

Logical Operators Combine logical operations Conditional-And (&&)

(file != null) && file.IsOpen Conditional-Or (||)

(key == 'q') || (key == 'Q') And (&)

file1.Close() & file2.Close() Or (|)

file1.Close() | file2.Close() Not (!)

!file.Open()

Logical Equivalence

DeMorgan's Theorem

!(a && b) is the equivalent of (!a || !b) !(a || b) is the equivalent of (!a && !b)

if-else Statementsif (color == SignalColors.Red){    Stop();}else if (color == SignalColors.Yellow){    Evaluate();}else{    Drive();}

switch Statementsswitch (color){case SignalColors.Red:

    {        Stop();        break;    }case SignalColors.Yellow:

    {        Evaluate();        break;    }default:

    {          Drive();

        break;    }}

switch Statementsswitch (color){case SignalColors.Red:

    {        Stop();        break;    }case SignalColors.Yellow: // fall through default:

    {          Drive();

        break;    }}

switch Statementsswitch (color){case SignalColors.Red: // fall throughcase SignalColors.Yellow: // fall through default:

    {          Drive();

        break;    }}

switch Statements

switch (name){case "John":case "Johnny":case "Jon":

    {          ...

        break;    }}

ANOTHER INVOICE TOTAL APPLICATION

Form Enhancements

Select a discount tier based on the customer typeChapter 5 exercises

while Statements

while (!file.Eof){    file.ReadByte();}

char ch;do{    ch = file.ReadChar();} while (ch != 'q');

for Statements

int factorial = 1;for (int i = 2; i <= value; ++i){    factorial *= i;}

string digits = ""for (char ch = '9'; ch <= '0'; ch-=1){    digits += ch;}

break and continue Statements

break allows is to jump out of a loop before reaching its normal termination condition

continue allows us to jump to the next iteration of a loop

break and continue Statements

string text = "";for (int i = 0; i < 10; i++){    if (i % 2 == 0)        continue;    if (i > 8)        break;    text += i.ToString();}

Caution!

int index = 0; while (++index < lastIndex){    TestIndex(index);}

int index = 0; while (index++ < lastIndex){    TestIndex(index);}

What About This?

for (int i = 0; i < 10; i++){}

for (int i = 0; i < 10; ++i){}

DEBUGGING LOOPS

Debugging Summary

Stepping through code (over, into, out) Setting breakpoints Conditional breakpoints

THE FUTURE VALUE FORM

Form Enhancements

Examine the looping calculation in the Future Value exampleChapter 5 exercises

CHAPTER 6

CLASS METHODS

Class Methodsclass DiscountCalculator{    private decimal CalcDiscPercent(decimal inAmt)    {        return (inAmt > 250.0m) ? 0.10m: 0.0m;    }

    public decimal CalcDiscAmount(decimal inAmt)    {        decimal percent = CalcDiscPercent(inAmt);        return inAmt * percent;    }}

Access Modifierclass DiscountCalculator{    private decimal CalcDiscPercent(decimal inAmt)    {        return (inAmt > 250.0m) ? 0.10m: 0.0m;    }

    public decimal CalcDiscAmount(decimal inAmt)    {        decimal percent = CalcDiscPercent(inAmt);        return inAmt * percent;    }}

Return Typeclass DiscountCalculator{    private decimal CalcDiscPercent(decimal inAmt)    {        return (inAmt > 250.0m) ? 0.10m: 0.0m;    }

    public decimal CalcDiscAmount(decimal inAmt)    {        decimal percent = CalcDiscPercent(inAmt);        return inAmt * percent;    }}

Method Nameclass DiscountCalculator{    private decimal CalcDiscPercent(decimal inAmt)    {        return (inAmt > 250.0m) ? 0.10m: 0.0m;    }

    public decimal CalcDiscAmount(decimal inAmt)    {        decimal percent = CalcDiscPercent(inAmt);        return inAmt * percent;    }}

Method Parametersclass DiscountCalculator{    private decimal CalcDiscPercent(decimal inAmt)    {        return (inAmt > 250.0m) ? 0.10m: 0.0m;    }

    public decimal CalcDiscAmount(decimal inAmt)    {        decimal percent = CalcDiscPercent(inAmt);        return inAmt * percent;    }}

Return Statementsclass DiscountCalculator{    private decimal CalcDiscPercent(decimal inAmt)    {        return (inAmt > 250.0m) ? 0.10m: 0.0m;    }

    public decimal CalcDiscAmount(decimal inAmt)    {        decimal percent = CalcDiscPercent(inAmt);        return inAmt * percent;    }}

PASSING PARAMETERS

Parameters Summary

Pass zero or more parameters Parameters can be optional Optional parameters are "pre-defined"

using constant values Optional parameters can be passed by

position or name Recommendation: Use

optional parameters

cautiously

Parameters Summary

Parameters are usually passed by value Parameters can be passed by reference Reference parameters can change the

value of the variable that was passed into the method

EVENTS AND DELEGATES

Event and Delegate Summary

A delegate connects an event to an event handler.

The delegate specifies the handler’s return type and parameters.

Event handlers can be shared with multiple controlsChapter 6, Exercise 1Clear result when any value

changes

CHAPTER 7

EXCEPTIONS AND VALIDATION

Exceptions

Exception

Format Exception Arithmetic Exception

OverflowException DivideByZeroException

Format Exception

string value = “ABCDEF”;int number = Convert.ToInt32(value);

Overflow Exception

checked{ byte value = 200; value += 200;

int temp = 5000; byte check = (byte)temp;}

“Catching” an Exception

try{ int dividend = 20; int divisor = 0; int quotient = dividend / divisor; int next = quotient + 1;}catch{}

Responding to Exceptions A simple message box:

MessageBox.Show(message, title); Set control focus:

txtNumber.Focus();

Catching Multiple Exceptions

try {}catch(FormatException e){}catch(OverflowException e){}catch(Exception e){}finally{}

Throwing an Exceptionthrow new Exception(“Really bad error!”);

try{}catch(FormatException e){ throw e;}

FUTURE VALUE EXCEPTIONS

Form Enhancements

What exceptions might occur in the future value calculation?Chapter 7 exercises