.Net Framework FAQ

Submit Interview FAQ
Home » Interview FAQ » .Net FrameworkRSS Feeds

What's the problem with .NET generics?

  Shared By: Dan Romero    Date: Dec 22    Category: .Net Framework    Views: 762


.NET generics work great for container classes. But what about other uses? Well, it turns out that .NET generics have a major limitation - they require the type parameter to be constrained. For example, you cannot do this:

static class Disposer<T>
public static void Dispose(T obj) { obj.Dispose(); }
The C# compiler will refuse to compile this code, as the type T has not been constrained, and therefore only supports the methods of System.Object. Dispose is not a method on System.Object, so the compilation fails. To fix this code, we need to add a where clause, to reassure the compiler that our type T does indeed have a Dispose method

static class Disposer<T> where T : IDisposable
public static void Dispose(T obj) { obj.Dispose(); }
The problem is that the requirement for explicit contraints is very limiting. We can use constraints to say that T implements a particular interface, but we can't dilute that to simply say that T implements a particular method. Contrast this with C++ templates (for example), where no constraint at all is required - it is assumed (and verified at compile time) that if the code invokes the Dispose() method on a type, then the type will support the method.

In fact, after writing generic code with interface constraints, we quickly see that we haven't gained much over non-generic interface-based programming. For example, we can easily rewrite the Disposer class without generics:

static class Disposer
public static void Dispose( IDisposable obj ) { obj.Dispose(); }
For more on this topic, start by reading the following articles:

Bruce Eckel: http://www.mindview.net/WebLog/log-0050
Ian Griffiths: www.interact-sw.co.uk/iangblog/2004/03/14/generics
Charles Cook: www.cookcomputing.com/blog/archives/000425.html


Didn't find what you were looking for? Find more on What's the problem with .NET generics? Or get search suggestion and latest updates.

Your Comment
  • Comment should be atleast 30 Characters.
  • Please put code inside [Code] your code [/Code].