Generic extension methods
I was playing around with the compiler when I hit this interesting feature. I was very surprised to see that this has compiled successfully.
1: static class Program
2: {
3: static void Main(string[] args)
4: {
5: IProcesser<GZipStream> p = null;
6: p.HasTimeout();
7: }
8: }
9:
10: public static class Extensions
11: {
12: public static bool HasTimeout<T>(this IProcesser<T> s)
13: where T : Stream
14: {
15: return s.Desitnation.CanTimeout;
16: }
17: }
18:
19: public interface IProcesser<TDestination>
20: where TDestination : Stream
21: {
22: TDestination Desitnation { get; }
23: }