360 likes | 492 Views
FDSc. Module 201 Object Oriented Programming Lecture 2 – Data Types. Previously. Variables. Objectives. Scope Variable lifetime Data types. Defining Scope. A variable comes into existence when it is created When we use a variable it is said to be in scope at that location.
E N D
FDSc Module 201 Object Oriented Programming Lecture 2 – Data Types
Previously... • Variables
Objectives • Scope • Variable lifetime • Data types
Defining Scope • A variable comes into existence when it is created • When we use a variable it is said to be in scope at that location. • We can then use that variable in the same method using a variety of statements • When the method is finished, the variable disappears, and so does the scope of that variable
Defining Scope • The opening and closing braces of a method define the scope. • Variables within this method are called local variables class Example { void method1() { intsomeVariable; ... } void method2() { someVariable = 42; } } What error would occur here? Variable not in scope
Defining Class Scope class Example { void method1() { someVariable = 56; //Ok ... } void method2() { someVariable = 42; //OK } intsomeVariable = 0; } Defined within the class and therefore has class scope
Variable Lifetime Static void VariableLifetime() { InttotalAmount = 100 totalAmount = totalAmount + 100; } Static inttotalAmount; //Declared at class level Static void VariableScope() { totalAmount= 100; ShowTotalAmount(); } ShowTotalAmount() { Console.WriteLine(“Total amount is {0}”, totalAmount); }
Data Types • All information has a type • Type defines how information will be stored, used, manipulated and displayed • .NET Framework contains structures and classes that represent various types of data • All data types in VB and C# are based on a .NET Framework class or structure
Integer Data Types • sbyte – based on System.Sbyte • Signed 8-bit integer between -128 and 127 • byte – based on System.Byte • 8-bit integer between 0 and 255 • short – based on System.Int16 • 16-bit integer between -32768 and 32767 • ushort - based on System.Int16 • 16-bit unsigned integer between 0 and 65535 • int – based on System.Int32 • 32-bit integer between -2147483648 and 2147483647 • uint - based on System.Int32 • 32-bit integer between 0 and 4294967295 • long - based on System.Int64 • 64-bit integer between -9223372036854775808 and 9223372036854775807 • ulong - based on System.Int64 • Unsigned 32-bit integer between 0 and 18446744073709551615
How to Choose an Integer Data Type • Choose data type that is appropriate • Balance memory requirement and performance • int requires twice as much storage space (4 bytes) than short (2 bytes) • int and long are more efficient than byte or short because .NET Frameworks represents numbers as 32-bit or 64-bit values • Use int unless you have concerns about memory
Data Types Fields and Methods • Data types are based on structures • A structure is a type of class • Structure uses methods and fields • Data Types have a MinValue and a MaxValue which represent low and end of range of values • ToString returns string representation of value • Specify format to control how string is displayed
Floating Point Data Types • Float – based on System.Single • 32-bit single-precision floating point number between -3.402823 x 1038and -1.401298 / 1045 for negative values and between 1.401298 / 1045 and 3.402823 x 1038 for positive values • Double – based on System.Double • 64-bit double-precision floating point number between -1.79769313486232 x 10308and -4.94065645841246544 / 10324 for negative numbers and between 1.79769313486232 / 10324 and 1.79769313486232 x 10308 • Use double unless you have valid concerns about memory usage • More accurate
Decimal • Based on System.Decimal • 128-bit number between -79228162514264337593543950335 and 79228162514264337593543950335 with no decimal places and -7.9228162514264337593543950335 and 7.9228162514264337593543950335 with up to 28 decimal places • Holds numbers of lesser magnitude than floating points but with greater precision • Use when you need utmost precision
Decimal Data Types Fields and Methods • Truncate – returns integer part and discards fractional part • Round – rounds to nearest integer or to a specified number of decimal places • Floor – rounds to integer smaller or equal to the value • Ceiling – rounds to integer greater than or equal to the value
Char Data Type • Based on System.Char • 16-bit numeric value between 0 to 65535 • Holds code points, or character codes, representing a single Unicode character • The first 128 code points, number 0 to 127 arethe ASCII character set
Char Data Type Methods • ConvertFromUtf32 – returns Unicode characters associated with code point • ConvertToUtf32 – returns code point associated with Unicode character • IsControl– indicates if a tab, carriage return or line feed • IsDigit – indicates if a decimal number • IsLetter – indicates if a letter • IsLetterOrDigit – indicates if a letter or a decimal number • IsLower – indicates if a lower case letter • IsUpper – indicates if upper case letter • IsNumber – indicates if a number • IsPunctuation – indicates if punctuation character • IsSeparator – indicates if separator character • IsSymbol – indicates if symbol • IsWhiteSpace – indicates if whitespace
String Data Types • Based on System.String • Represents a series of 0 to 2 billion characters • Use escape sequences (\) or preface with @ to indicate quotation marks and backslashes in strings • E.G. String greeting1 = "Hello \ " Robert\" "; String greeting2 = @“Hello " " Robert "" ";
Bool Data Type • Based on System.Boolean • 0 (true) or 1 (false) • Used to test a condition • E.G. if(firstVariable > secondVariable) { Console.WriteLine(“{0} is greater than {1}“, firstVariable, secondVariable); }
Object Data Type • Based on System.Object • Everything ultimately is derived from Object • Highest level object there is in the .NET Framework • Can contain any data type, including another object • Use GetType to determine what type of data is stored • Contains a pointer to the value in memory, NOT actual data • Always needs an extra step therefore is not efficient
Converting to Another Data Type • Widening conversion • New data type can store all of the values of the original data type • E.g. 32-bit integer to decimal (decimal can store everything 32-bit int can) • Compiler will make the conversion for you • Narrowing conversion • New data type cannot store all of the values of the original data type • E.g. decimal to int or int to byte could result in data loss • Need to make the conversion in code • Make your conversion explicitly in code • Code is more readable and understandable
Converting To Another Data Type • Use a cast operator • shortValue = (short)(shortValue + byteValue); • Convert class includes a conversion method for each data type • Convert.ToSingle(longValue); • Parse method converts a string to a data type • Single.Parse(longValue.ToString());
Value Types and Reference Types • Value type: variables directly store their value • Stored in the stack, pool of memory allocated by runtime for value types • Declared in code and runtime allocates proper amount of memory for them • Efficient because space has already been allocated on the stack (memory) • Reference type: variables store a reference to their values • Stored in the heap, a pool of memory whose size is dynamic • Runtime will allocate memory as needed • Value is stored in the stack, but variable stores reference to value • Reference is used to find the value each time the variable is accessed in code • Less efficient than value types
Boxing • A value type is converted to a reference type • .NET Framework copies the value to the heap and returns a reference to the value • E.g. store 7 in an object variable
Unboxing • A reference type is converted to a value type • .NET Framework uses reference to copy the value back into a value type • E.g. 7 stored in an object: .NET has a reference to the 7, goes and retrieves that and then brings that back • Both of these (boxing and unboxing) are less efficient than using value types
Constants • Declared like variables • Value cannot be changed in code
Enumerations • Collection of related constants • Has a name and a numeric data type • Has a number of fields, each with a name and a value
Structs • Structs (structures) are user defined data types • Similar to enumerations in that they are a collection of values • Can contain any data type
Operators • Perform an action on one or more values and return the result of the operation • Arithmetic operators • String operators • Assignment operators • Comparison operators • Logical operators • Type operators
Arithmetic Operators • Perform basic arithmetic on one or more variables • + adds two numbers or converts a negative number into a positive number • - subtracts two numbers or converts a positive number into a negative number • * multiplies two numbers • / divides two numbers • % divides two numbers and returns only the remainder of the result • ++ increments a number by 1 • -- decrements a number by 1
String Operators • + operator concatenates, or adds, two strings together to produce a new string String sentence1 = “Hello “; String sentence2 = “Joe”; String sentence3; Sentence3 = sentence1 + sentence2 • This will return “Hello Joe”
Assignment Operators • Perform similar operations as arithmetic operators • += adds two numbers or converts a negative number into a positive number • -= subtracts two numbers or converts a positive number into a negative number • *= multiplies two numbers • /= divides two numbers • %= divides two numbers and returns only the remainder of the result
Comparison Operators • Used to compare two values • == returns true if two values are equal • != returns true if two values are not equal • > returns true if the first value is greater than the second value • < returns true is the first value is less than the second value • >= returns true is the first value is greater than or equal to the second value • <= returns true if the first value is less than or equal to the second value
Logical Operators • Used to compare two expressions • A & B returns true is both A and B are true • A | B returns true if either A or B is true • !A returns true if A is not true • A ^ B returns true if either A or B is true but both of them is not true • A && B returns true if both A and B are true. Does not evaluate B if A is not true • A || B returns true if either A or B is true. Does not evaluate B if A is true
Type Operators • Test whether an object is of a particular data type Object object1; Object1 = 7; If (object1 is int) { Console.WriteLine(“object1 = 7 and is type Integer”); }
Summary • Scope • Variable lifetime • Data types