Welcome to MSDN Blogs Sign in | Join | Help

Same name for a generic and non-generic class

 

I was writing a sample to do something and I noticed that when I declare and instantiate a generic class, I had to pass the generic type in two places:

1.  Foo<Int32> fooGenericInstance;

2.  FooGenericInstance = new Foo<Int32>();

 

First I was not sure why I had to pass the type is two places. After some pondering I came to the following conclusion.

 

namespace Sample

{

    using System;

    class Foo<T>

    {

        public Foo() { }

        public void FooMethod()

        {

            Console.WriteLine("This is generic Foo class");

        }

    }

    public class Bar

    {

        static public void Main()

        {

            Foo<Int32> fooGenericInstance;

            fooGenericInstance = new Foo<Int32>();

            fooGenericInstance.FooMethod();

        }

    }

}

 

C# allows you have the same name for a generic and non-generic class. So you can write code such as below which has two types essentially which are Foo and Foo<T>. Now you have to make it very explicit both during instantiation and construction the class and constructor you are referring to. Thus you end up passing the type T in two places.

 

namespace Sample

{

    using System;

    class Foo<T>

    {

        public Foo() { }

        public void FooMethod()

        {

            Console.WriteLine("This is generic Foo class");

        }

    }

    class Foo

    {

        public Foo() { }

 

        public void FooMethod()

        {

            Console.WriteLine("This is Non-generic Foo class");

        }

 

        static public void Main()

        {

            Foo fooNonGenericInstance;

            Foo<Int32> fooGenericInstance;

 

            fooNonGenericInstance = new Foo();

            fooGenericInstance = new Foo<Int32>();

 

            fooNonGenericInstance.FooMethod();

            fooGenericInstance.FooMethod();

        }

    }

}

Published Wednesday, September 19, 2007 9:26 PM by thottams@microsoft.com

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# Airline Travel &raquo; Same name for a generic and non-generic class

Leave a Comment

(required) 
required 
(required) 

  
Enter Code Here: Required
 
Page view tracker