Top Banner
3. Data Types
26

3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

Dec 21, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

3. Data Types

Page 2: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

2Microsoft

Objectives

“.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to work together. To ensure interoperability across languages, Microsoft has also defined the CLS, or Common Language Specification, a subset of the CTS that all languages support. Otherwise, the types in C# are what you would expect from a modern OOPL…”

• The Common Type System• Value vs. reference types• Arrays• Namespaces

Page 3: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

3Microsoft

Part 1

• The Common Type System…

Page 4: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

4Microsoft

The Common Type System (CTS)

• CTS is based on a hierarchy of classes defined in FCL– all types inherit from Object (all except interface types)

St r i ng Ar r ay Val ueType Except i on Del egat e Cl ass1

Mul t i castDel egat e

Cl ass2

Cl ass3

Obj ect

Enum1

St r uct ur e1EnumPr i mi t i ve t ypes

Bool ean

Byt e

I nt 16

I nt 32

I nt 64

Char

Si ngl e

Doubl e

Deci mal

Dat eTi me

System-defined types

User-defined types

Del egat e1

Ti meSpan

Gui d

Page 5: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

5Microsoft

The Common Language Specification (CLS)

• Not all languages support all CTS types and features– C# supports unsigned integer types, VB.NET does not– C# is case sensitive, VB.NET is not– C# supports pointer types (in unsafe mode), VB.NET does not– C# supports operator overloading, VB.NET does not

• CLS was drafted to promote language interoperability– vast majority of classes within FCL are CLS-compliant

Page 6: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

6Microsoft

Mapping C# to CTS

• Language keywords map to common CTS classes:

Keyword Description Special format for literalsbool Boolean true false

char 16 bit Unicode character 'A' '\x0041' '\u0041'

sbyte 8 bit signed integer none

byte 8 bit unsigned integer none

short 16 bit signed integer none

ushort 16 bit unsigned integer none

int 32 bit signed integer none

uint 32 bit unsigned integer U suffix

long 64 bit signed integer L or l suffix

ulong 64 bit unsigned integer U/u and L/l suffix

float 32 bit floating point F or f suffix

double 64 bit floating point no suffix

decimal 128 bit high precision M or m suffix

string character sequence "hello", @"C:\dir\file.txt"

Page 7: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

7Microsoft

Example

• An example of using types in C#– declare before you use (compiler enforced)– initialize before you use (compiler enforced)

public class App{ public static void Main() { int width, height; width = 2; height = 4;

int area = width * height;

int x; int y = x * 2; ... }}

declarations

decl + initializer

error, x not set

Page 8: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

8Microsoft

Type conversion

• Some automatic type conversions available– from smaller to larger types

• Otherwise you need a cast or an explicit conversion…– typecast syntax is type name inside parentheses– conversion based on System.Convert class

int i = 5;double d = 3.2;string s = "496";

d = i;

i = (int) d;

i = System.Convert.ToInt32(s);

implicit conversion

typecast required

conversion required

Page 9: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

9Microsoft

Part 2

• Value vs. reference types…

Page 10: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

10Microsoft

Value vs. reference types

• C# separates data types into two categories• Value types:

– variable represents a value ("bits")

• Reference types:– variable represents a reference to a heap-based object– actual data resides in the object

int i;i = 10;

10

string s;s = "calico";

"calico"

Page 11: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

11Microsoft

How do you know which types are which?

• Memorization!• Though it's pretty obvious based on past experience

– primitive types like bool, int and double are values– remainder are reference types

int i;string s;Customer c1, c2;

i = 23;s = "a message";c1 = null;c2 = new Customer(…);

Page 12: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

12Microsoft

Boxing and Unboxing

• When necessary, C# will auto-convert value <==> object– value ==> object is called "boxing"– object ==> value is called "unboxing"

int i, j;object obj;string s;

i = 32;obj = i; // boxed copy!i = 19;j = (int) obj; // unboxed!

s = j.ToString(); // boxed!s = 99.ToString(); // boxed!

Page 13: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

13Microsoft

User-defined reference types

• Classes!– for example, Customer class we worked with earlier…

public class Customer{ public string Name; // fields public int ID;

public Customer(string name, int id) // constructor { this.Name = name; this.ID = id; }

public override string ToString() // method { return "Customer: " + this.Name; }}

Page 14: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

14Microsoft

Working with reference types…

• Creating, assigning, and comparing:

Customer c1, c2, c3;string s1, s2;

c1 = new Customer("joe hummel", 36259);c2 = new Customer("marybeth lore", 55298);c3 = null; // c3 references no object

c3 = c1; // c3 now references same obj as c1

if (c1 == null) ... // do I ref an object? if (c1 == c2) ... // compares references if (c1.Equals(c2)) ... // compares objects

if (s1 == s2) ... // exception: == overloaded to // compare string data

Page 15: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

15Microsoft

Defining equality

• Classes should override Equals

public class Customer{ . . .

public override bool Equals(object obj) { Customer other; if ((obj == null) || (!(obj is Customer))) return false; // definitely not equal

other = (Customer) obj; // typecast to access return this.ID == other.ID; // equal if same id... }

Page 16: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

16Microsoft

GetHashCode

• If you override Equals, must also override GetHashCode:

public class Customer{ . . .

public override int GetHashCode() { return this.id.GetHashCode(); }

Page 17: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

17Microsoft

Part 3

• Arrays…

Page 18: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

18Microsoft

Arrays

• Arrays are reference types– based on Array class in FCL– must be created using new– 0-based indexing– assigned default values (0 for numeric, null for references,

etc.)

int[] a;a = new int[5];

a[0] = 17;a[1] = 32;int x = a[0] + a[1] + a[4];

int l = a.Length;

element access

create

number of elements

Page 19: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

19Microsoft

Multi-dimensional arrays

• C# supports arrays as a single object OR array of arrays– latter allows you to implement jagged arrays

Customer[,] twoD;int[][] jagged2D;

// 2D array as single objecttwoD = new Customer[10, 100];twoD[0, 0] = new Customer(…);twoD[9, 99] = new Customer(…);

// 2D array as array of arraysjagged2D = new int[10][];jagged2D[0] = new int[10];jagged2D[1] = new int[20];jagged2D[9] = new int[100];

jagged2D[0][0] = 1;jagged2D[9][99] = 100;

Page 20: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

20Microsoft

Part 4

• Namespaces…

Page 21: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

21Microsoft

Namespaces

• Namespaces are a means for organizing types– a namespace N is a set of names scoped by N– namespaces are often nested

namespace Workshop{ public class Customer { . . . }

public class Product { . . . }}//namespace

Workshop.Customer

Page 22: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

22Microsoft

Example

• Framework Class Library (FCL) contains 1000's of classes– how to organize?– how to avoid name collisions?

• with FCL• within FCL

Page 23: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

23Microsoft

FCL namespaces

• FCL's outermost namespace is "System"• FCL technologies nested within System…

Namespace Purpose Assembly

System Core classes, types mscorlib.dll

System.Collections Data structures mscorlib.dll

System.Data Database access System.Data.dll

System.Windows.Forms GUI System.Windows.Forms.dll

System.XML XML processing System.Xml.dll

Page 24: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

24Microsoft

Namespace != Assembly

• Orthogonal concepts:– namespace for organization– assembly for packaging

• One namespace could be spread across multiple assemblies• One assembly may contain multiple namesspaces

– e.g. mscorlib.dll

Page 25: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

25Microsoft

Summary

• CTS is the common type system– same type system for all languages– types implemented by classes in FCL– fundamental difference between value & reference types

• CLS is the common language specification– types that are guaranteed to work across languages

• Try not to confuse namespaces with assemblies…– namespaces help with organization– assemblies denote implementation / packaging

Page 26: 3. Data Types. 2 Microsoft Objectives “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different.

26Microsoft

References

• Books:– I. Pohl, "C# by Dissection"– S. Lippman, "C# Primer"– J. Mayo, "C# Unleashed"