constants objectives
play

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


  1. Constants

  2. Objectives • Describe ways to create constants – const – readonly – enum 2

  3. Motivation • Idea of constant is useful – makes programs more readable – allows more compile time error checking 3

  4. Const Keyword const used to indicate compile time constant • – applicable to local variables – applicable to fields 4

  5. Const local variable • Local variable can be declared constant – must be initialized inline – value cannot be changed later double Area(double radius) { constant const double pi = 3.14; local variable return pi * radius * radius; } 5

  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; constant public const double E = 2.7182818284590452354; fields ... } 6

  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; implicitly public const double E = 2.7182818284590452354; static ... } double radius = 1.5; access using double area = Math.PI * radius * radius; type name 7

  8. Compile time const • const provides restrictive notion of constant – value must be computable at compile time void Process(int width, int height) { error, value must be const int area = width * height; compile time constant ... } 8

  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 const Person p = null; ok const Person ann = new Person("Ann"); error const string greeting = "hello"; ok 9

  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 double Average(const int a, const int b) parameters { not supported ... } error, const double Process(const Person p) parameters { not supported ... } 10

  11. Readonly Keyword readonly used to indicate runtime constant • – applicable only to fields 11

  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; readonly field public Person(DateTime dob) { this.dob = dob; } ... } 12

  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 struct Point { public static readonly Point origin = new Point(0, 0); ok ... } 13

  14. Enum Keyword enum used to create new type • – with corresponding set of symbolic constants 14

  15. Enum definition • Can create enumeration value type – use keyword enum – specify type name – give list of named constants define enum enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } 15

  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 Day d; create variable d = Day.Monday; if (d == Day.Saturday || d == Day.Sunday) Console.WriteLine("weekend"); 16

  17. Enum underlying type • Enum uses an underlying type for representation – default is int – can use any integral type except char represented enum Day using int { represented Sunday, enum ErrorCode : byte using short Monday, { Tuesday, DomainError, Wednesday, RangeError Thursday, } Friday, Saturday } 17

  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 enum Day { { default specify Sunday, // 0 Sunday = 1, values value Monday, // 1 Monday, // 2 Tuesday, // 2 Tuesday, // 3 Wednesday, // 3 Wednesday, // 4 Thursday, // 4 Thursday = 10, Friday, // 5 Friday, // 11 Saturday // 6 Saturday // 12 } } 18

  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 Day d = (Day)3; convert to Day int i = (int)d; convert to int 19

  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 Object ValueType Enum user enum 20

  21. Boxing • Enums are value types – boxed when used as object – value copied into box Day d = Day.Monday; object o = d; boxed d Monday ... o Monday 21

  22. Unboxing Can extract enum from box • – cast required – System.InvalidCastException thrown if cast fails Day d = Day.Monday; object o = d; Day e = (Day)o; unbox ... o Monday e Monday 22

  23. Summary • 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 23

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend