Question? Leave a message!

C# data types, objects and references

C# data types, objects and references
Dr.MasonHanks Profile Pic
Published Date:23-07-2017
Website URL
Object Oriented Software Development 4. C data types, objects and references www.ThesisScientist.comData in programs  Programs need to store information in computer’s memory  Information must be available to the program when needed  Simple data values  Numbers, characters, etc.  Objects  Attributes, behaviour which can be invoked  In C, even simple data values are objects www.ThesisScientist.comVariables  Program accesses data through variables  A variable is the program’s “label” for, or reference to, an object  Each variable has a specific scope  Instance variables – belong to an object, can be accessed by any code in that object’s class  Method parameters - can only be accessed in the method where they are declared  Local variables – can only be accessed in the method or code block where they are declared www.ThesisScientist.comAreas of operating memory  Stack  Keeps track of executing code  “what’s been called?”  Stores variables needed by executing code  Only last added items can be accessed  Like a stack of boxes  Heap  Keeps track of objects  Objects can be accessed by any code at any time www.ThesisScientist.comStack and heap example  ClassesDemo project  Employee.cs  TimeSheet.cs  Program.cs  What happens in memory when program runs? www.ThesisScientist.comWhat goes on the stack?  Program.Main executes  Variables are placed on stack: www.ThesisScientist.comMethod called from Main  RecordOvertime method of an Employee object is called  Parameters stored on stack www.ThesisScientist.comMethod calls another method  AddEntry method of the TimeSheet object is called  Parameters stored on stack www.ThesisScientist.comStack and heap example  AddEntry method finishes  Variables removed from stack  RecordOvertime method finishes  Variables removed from stack www.ThesisScientist.comWhat is actually stored?  Example:  hours parameter in call to AddEntry  Integer value  Memory to hold an integer value is allocated on the stack  Actual integer value stored on stack www.ThesisScientist.comWhat is actually stored?  Another example:  emp1 variable in Main, of type Employee  Points to an Employee object Heap Stack ts: TimeSheet emp2:Employee emp1:Employee loc: Location Employee Program.Main www.ThesisScientist.comObject references  Memory to store attributes of object is allocated on heap  The stack just stores a pointer, or reference, to the object  The reference is essentially an address in heap memory which the program can go to in order to find the correct object www.ThesisScientist.comObject references  Main creates several objects on the heap and references to these on the stack Stack Heap TimeSheet Employee ts: TimeSheet emp2:Employee Employee emp1:Employee loc: Location Program.Main Location www.ThesisScientist.comParameter passing  RecordOvertime passes integer value hours to AddEntry  Copy is made of integer value and added to stack as parameter of AddEntry www.ThesisScientist.comReferences to same object  Main creates TimeSheet object reference and passes it as a parameter to RecordOvertime  Parameter contains a copy of the reference  There can be many references in the stack to a single object in the heap Stack Heap isWeekend: bool hours: int timeSheet: TimeSheet TimeSheet Employee.RecordOvertime copy ts: TimeSheet emp2:Employee emp1:Employee loc: Location Program.Main www.ThesisScientist.comReleasing memory  If a program keeps allocating memory and never releases it for re-use, the memory will fill up and the computer will crash  Stack memory is released whenever a method finishes  The memory allocated for that method is removed from the stack and is available for re-use www.ThesisScientist.comGarbage collection  Releasing heap memory is more complicated  As long as there is at least one reference to an object on the heap then the object is kept “alive”  Objects with no references are eligible to be removed and their memory released  Removed by the garbage collector  Employee objects in the example will be removed when Main method finishes www.ThesisScientist.comGarbage collection  Garbage collector (GC) runs periodically and removes “orphaned” objects  Can’t be sure exactly when it will do so  GC is a feature of a managed language  e.g. .NET languages, Java, PHP  Programmer does not have to manage memory  Unmanaged languages require programmer to explicitly release memory  e.g. C++, C www.ThesisScientist.comValue types and reference types  The .NET type system defines two categories of data type, or object type  Value types  Values can be stored on the stack  Derived from System.ValueType  Examples of built-in framework value types:  Byte, Int16, Int32, Int64, Single, Double, Decimal, Char, Boolean  C has built-in types which are aliases for these:  byte, short, int, long, float, double, decimal, char, bool www.ThesisScientist.comValue types and reference types  Reference types  Objects stored in the heap  References stored on the stack  Types derived from System.Object  Examples of reference types:  String (C alias is string)  all classes, including classes in your project  arrays (see later)  delegates (see later)  Interfaces (see later)