generics in.net and c# generics. ”generic” programming in c#/java (as it was until summer 2005)...

10
Generics in .NET and C# Generics

Upload: scot-ward

Post on 31-Dec-2015

245 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

Generics in .NET and C#

Generics

Page 2: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

”Generic” Programming in C#/Java(as it was until Summer 2005)

All classes inherit from ObjectSo we can apply polymorphism and use Object as static type for elements in containersFor instance: Object[ ] data

this array may take any object as elementThis approach is well known from standard collections as ArrayList, HashMap etc.

Page 3: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

Pros and Cons

Prosheterogeneous collections...

Consmany type castsnot type safe

type checking is done runtime when castingint and other native (value) type must be wrapped. (boxing – costs runtime overhead)

Is this really an

advantage?

Page 4: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

Programming Error

The program is incorrect, but we don’t detect it

It is preferable, if :The program doesn’t work correctly, and we are told by some runtime error (exception)

The compiler rejects the program (compile-time error)

Page 5: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

Strategy

Do as much error-checking compile-time as possible:

Advantages:Easier to write correct programsMore efficient program execution (better performance)

Disadvantages:Restricts programmers creativity (less flexibility)

Is this really a disadvantage?

Page 6: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

The Idea: Types as Parameters

C#/Java before 2005:

ArrayList al = new ArrayList();Customer c= (Customer)al.get(i);//cast

Instead we want something like:

ArrayList<Customer> al = new ArrayList<Customer>();

Customer c= al.get(i);

– The compiler is able to check that only objects with static type Customer is placed in al

– So the compiler knows that everything that may come out from al has static type Customer

– So static type checking instead of dynamic type checking is possible

– Dynamic casting can be avoided (but is not in all implementations)

Type parameter

Page 7: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

In C#: EmpSeqApplEmployee a1 = new Employee("Joe", "Programmer", 10000);Employee a = new Employee("Curt", "Senior Programmer", 20000);Employee b = new Employee("Carl", "Programmer", 10000);Employee c = new Employee("Karen", "System Programmer", 13000);Employee d = new Employee("Lisa", "Programmer", 11000);Employee e = new Employee("John", "System Engineer", 9000);string s = "HELLOOOO!";

IList<Employee> emps = new List<Employee>();emps.Add(a1);emps.Add(a);emps.Add(b);emps.Add(c);emps.Add(d);emps.Add(e);//emps.Add(s);//COMPILER ERROR!!!!

Page 8: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

.NET Generics

Page 9: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

But everything comes at a price:

no heterogeneous collectionsBut that is not so bad...

more complicated type systemmore complicated syntaxone needs a pre-processor, giving

slower compilationmore mysterious error messages

Page 10: Generics in.NET and C# Generics. ”Generic” Programming in C#/Java (as it was until Summer 2005) All classes inherit from Object So we can apply polymorphism

Generics vs. Polymorphism

Generics:all elements has the same static type (not object!)static typing (compile-time), static binding is possibleFor instance trying to insert a float to List<int> l yields an compiler error

Data Structures based on Polymorphism:elements may have different types, but all must be subtypes of ObjectDynamic type-checking (when casting)Dynamic binding