开发者

When is it important to have a public parameterless constructor in C#?

I'm trying to understand the constraints on generic type parameters in C#. What is the purpose of the where T : new() constraint? Why would you need to insist that the type argument have a public parameterless constructor?

Edit: I must be missing something. The highest rated answer says the public parameterless constructor is nece开发者_C百科ssary to instantiate the generic type. If that's the case, why the does this code compile and run?

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //class Foo has no public parameterless constructor
            var test = new genericClass<Foo>(); 
        }
    }

    class genericClass<T> where T : new()
    {
        T test = new T();  //yet no problem instantiating
    }

    class Foo
    {
        //no public parameterless constructor here
    }
}

Edit: In his comment, gabe reminded me that if I don't define a constructor, the compiler provides a parameterless one by default. So, class Foo in my example actually does have a public parameterless constructor.


If you want to instantiate a new T.

void MyMethod<T>() where T : new()
{
  T foo = new T();
  ...
}


Also, I believe that serialization requires a public parameterless constructor...


I don't know about serizlization, but I can mention that COM objects require a parameterless constructor as parameterized constructors are not supported, as far as I know.


That is necessary whenever any method is creating an object of type T.


When ever you would want to write new T(); inside a generic method/class you'll need that constraint so T create<T>(/*...*/) would probably need it

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜