Constants Objectives Describe ways to create constants const - - PDF document

constants objectives
SMART_READER_LITE
LIVE PREVIEW

Constants Objectives Describe ways to create constants const - - PDF document

Constants Objectives Describe ways to create constants const readonly enum 2 Motivation Idea of constant is useful makes programs more readable allows more compile time error checking 3 Const Keyword const used


slide-1
SLIDE 1

Constants

slide-2
SLIDE 2

Objectives

  • Describe ways to create constants

– const – readonly – enum

2

slide-3
SLIDE 3

Motivation

  • Idea of constant is useful

– makes programs more readable – allows more compile time error checking

3

slide-4
SLIDE 4

Const

  • Keyword const used to indicate compile time constant

– applicable to local variables – applicable to fields

4

slide-5
SLIDE 5

Const local variable

  • Local variable can be declared constant

– must be initialized inline – value cannot be changed later

double Area(double radius) { const double pi = 3.14; return pi * radius * radius; }

constant local variable

5

slide-6
SLIDE 6

Const field

  • Field can be declared constant

– must be initialized inline – value cannot be changed later

public class Math { public const double PI = 3.14159265358979323846; public const double E = 2.7182818284590452354; ... }

constant fields

6

slide-7
SLIDE 7

Const and static

  • Field cannot be both declared both const and static

– not needed – const field automatically static – saves memory by generating single copy

public class Math { public const double PI = 3.14159265358979323846; public const double E = 2.7182818284590452354; ... }

implicitly static

double radius = 1.5; double area = Math.PI * radius * radius;

access using type name

7

slide-8
SLIDE 8

Compile time const

  • const provides restrictive notion of constant

– value must be computable at compile time

void Process(int width, int height) { const int area = width * height; ... }

error, value must be compile time constant

8

slide-9
SLIDE 9

Limited const references

  • Value for const reference must be compile time constant

– references can only be null – too limited to be truly useful

  • Works for strings since compile time literals exist

9

const Person p = null; const Person ann = new Person("Ann");

  • k

error

const string greeting = "hello";

  • k
slide-10
SLIDE 10

No const parameters

  • Parameters cannot be const

– not value type parameters – not reference type parameters – parameter value is not determined at compile time

error, const parameters not supported

double Average(const int a, const int b) { ... }

error, const parameters not supported

double Process(const Person p) { ... }

10

slide-11
SLIDE 11

Readonly

  • Keyword readonly used to indicate runtime constant

– applicable only to fields

11

slide-12
SLIDE 12

Readonly field

  • Field can be declared readonly

– can only be initialized using variable initializer or in constructor – value cannot be changed later – compiler warning if not set – value used for initialization can be determined at runtime

class Person { readonly DateTime dob; public Person(DateTime dob) { this.dob = dob; } ... }

readonly field

12

slide-13
SLIDE 13

Readonly and static

  • Fields often made both readonly and static

– more flexible than const – prevents write access – allows runtime determination of value – saves memory by generating single copy

13 struct Point { public static readonly Point origin = new Point(0, 0); ... }

  • k
slide-14
SLIDE 14

Enum

  • Keyword enum used to create new type

– with corresponding set of symbolic constants

14

slide-15
SLIDE 15

Enum definition

  • Can create enumeration value type

– use keyword enum – specify type name – give list of named constants

enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }

define enum

15

slide-16
SLIDE 16

Enum use

  • Can create variables of enum type

– use enum name as type name

  • Can use values listed in enum

– values are scoped inside enum – prefix with enum name for access

16

Day d; d = Day.Monday; if (d == Day.Saturday || d == Day.Sunday) Console.WriteLine("weekend");

create variable

slide-17
SLIDE 17

Enum underlying type

  • Enum uses an underlying type for representation

– default is int – can use any integral type except char

represented using int

enum ErrorCode : byte { DomainError, RangeError }

represented using short

enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }

17

slide-18
SLIDE 18

Enum values

  • Enum constants have values

– default is sequential starting at 0 – can explicitly specify any value and others follow in sequence

enum Day { Sunday, // 0 Monday, // 1 Tuesday, // 2 Wednesday, // 3 Thursday, // 4 Friday, // 5 Saturday // 6 } default values enum Day { Sunday = 1, Monday, // 2 Tuesday, // 3 Wednesday, // 4 Thursday = 10, Friday, // 11 Saturday // 12 } specify value

18

slide-19
SLIDE 19

Enum and casting

  • Must cast to convert between enum and underlying type

– cast needed in either direction – helps reduce chance of assigning invalid value

19

Day d = (Day)3; int i = (int)d;

convert to Day convert to int

slide-20
SLIDE 20

Enum inheritance hierarchy

  • enum is part of type hierarchy

– ultimately descends from Object like all types – automatically derived from the value type Enum – Enum class provides many convenient utility methods

ValueType Object Enum user enum

20

slide-21
SLIDE 21

Boxing

  • Enums are value types

– boxed when used as object – value copied into box

Day d = Day.Monday;

  • bject o = d;

...

boxed

  • Monday

Monday d

21

slide-22
SLIDE 22

Unboxing

  • Can extract enum from box

– cast required – System.InvalidCastException thrown if cast fails

Day d = Day.Monday;

  • bject o = d;

Day e = (Day)o; ...

unbox

  • Monday

Monday e

22

slide-23
SLIDE 23

Summary

23

  • Three different techniques to create constants

– const – readonly – enum

  • static often combined with readonly on field

– gives more flexible notion of constant than const keyword