1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

15
1 .Net programming Generics NOEA / 2009 Generics 11. Generics in .NET and C#

description

3.Net programmingGenericsNOEA / 2009 Pro and cons Pro –heterogeneous collections Cons –many type casts –not type safe type checking is done runtime when casting –int and other native (value) type must be wrapped. (boxing – costs runtime overhead) Is this really an advantage?

Transcript of 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

Page 1: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

1.Net programming GenericsNOEA / 2009

Generics

11. Generics in .NET and C#

Page 2: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

2.Net programming GenericsNOEA / 2009

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

• All classes inherit from Object• So we can apply polymorphism and use Object as static type for

elements in containers• For instance: Object[ ] data

– this array may take any object as element– This approach is well known from standard collections as

ArrayList, HashMap etc.

Page 3: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

3.Net programming GenericsNOEA / 2009

Pro and cons

• Pro– heterogeneous collections

• Cons– many type casts– not type safe

• type checking is done runtime when casting– int and other native (value) type must be wrapped. (boxing – costs

runtime overhead)

Is this really an

advantage?

Page 4: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

4.Net programming GenericsNOEA / 2009

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: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

5.Net programming GenericsNOEA / 2009

Strategy

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

• Advantages:– Easier to write correct programs– More efficient program execution (better performance)

• Disadvantages:– Restricts programmers creativity (less flexibility) Is this really a

disadvantage?

Page 6: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

6.Net programming GenericsNOEA / 2009

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= 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–Dynamic casting is avoided

Typeparameter

Page 7: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

7.Net programming GenericsNOEA / 2009

In C#: EmpSeqAppl

Employee 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 = "HELLO!";

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: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

8.Net programming GenericsNOEA / 2009

.NET Generics

Page 9: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

9.Net programming GenericsNOEA / 2009

http://msdn2.microsoft.com/en-us/library/system.collections.generic.aspx

Page 10: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

10.Net programming GenericsNOEA / 2009

Page 11: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

11.Net programming GenericsNOEA / 2009

How to write your own generics: MyListProject

using System.Collections.Generic;

public class MyList<T>: IEnumerable, ICollection

T[] list;

public void Add(T o)

public T Get(int i)

Page 12: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

12.Net programming GenericsNOEA / 2009

Page 13: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

13.Net programming GenericsNOEA / 2009

But everything comes at a price:

– no heterogeneous collections• But that is not so bad...

– more complicated type system– more complicated syntax– one needs a pre-processor, giving

• slower compilation• more mysterious error messages (in c++ anyway)

Page 14: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

14.Net programming GenericsNOEA / 2009

Generics vs. Polymorphism

• Generics:– all elements has the same static type (not object!)– static typing (compile-time), static binding is possible– For 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 Object

– Dynamic type-checking (when casting)– Dynamic binding

Page 15: 1.Net programmingGenericsNOEA / 2009 Generics 11. Generics in.NET and C#

15.Net programming GenericsNOEA / 2009

Further reading

• In C#:– http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/csha

rp_generics.asp

• In Java:– http://java.sun.com/developer/technicalArticles/J2SE/generics/index.html

• In C++:– http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vcrefT

emplates.asp