Generics Issues

I’ve never really used Generics before so I’m still struggling with it.
What I think I want to do, is have a method that returns List;. I can return the list ok, and I can use Activator to create new T objects. The only problem is that my test requires some boxing, which is what I want to avoid. I’m wondering if the boxing will disappear in a real world example.

test code


using System;using System.Collections;using System.Collections.Generic;using System.Text;

namespace GenericsTest{class Program{    static void Main(string[] args)    {        Console.WriteLine("Test 1");        Factory fact = new Factory();        List<obint>; test1 = fact.GetList<obint>();        foreach (ObInt item in test1)        {            Console.WriteLine(item.Data);        }

        Console.WriteLine("nTest Two");        List<int> test2 = new List<int>();        test2.Add(1);        test2.Add(2);        test2.Add(3);        foreach (int item in test2)        {            Console.WriteLine(item);        }

        Console.WriteLine("Done, hit anykey");        Console.Read();

    }}

//The Goal is to see if I can return a Generic listpublic class Factory{    public List<t> GetList<t>() where T : IObject    {        List<t> list = new List<t>();

        T tmp = Activator.CreateInstance<t>();        tmp.Add(5);

        list.Add(tmp);

        return list;    }}

public interface IObject{    void Add(object item);}

public class ObInt : IObject{    protected int _data;    public int Data    {        get { return _data; }        set { _data = value; }    }

    public ObInt(int data)    {        _data = data;    }    public ObInt() { }

    public void Add(object item)    {        _data = (int)item;    }

}

public class ObString: IObject{    protected string _data;    public string Data    {        get { return _data; }        set { _data = value; }    }

    public ObString(string data)    {        _data = data;    }    public ObString() { }

    public void Add(object item)    {        _data = item.ToString();    }}}
Share

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CommentLuv Enabled