Lets try a silly example.

You want to change the tire on your car. You can't just erase the name FireStone and write in GoodYear, it would still be the same tire. You have to get your hands on a New tire to replace the old one.

The New method takes care of creating an instance of an object by allocating memory and any other resources needed by the object. If I am not mistaken, the opposite of New in managed code is Dispose, but you don't have to worry about directly calling Dispose most of the time, as the runtime will call the object's Dispose method when it is no longer needed.

Like the tire I mentioned above the font object tied to your text box is a 'specific instance' of a font. To replace it, you have to remove it and provide a new one.

It is true that they could have over loaded the text box's font property to take a string that is the name of the font and then create new font resource and use it, but like many changes made to make things easier, that would take some control away from the programmer. 

For example if you needed to switch back and forth between two fonts and the text box just took the name and size of the font and loaded them for you, it would be creating a new instance of the font every time you switched to it: (yes this is just pseudo code.)

tb1.font = "Arial 10pt";
// new Arial font object created
tb1.font = "Times 10pt";
//Arial font object thrown away, new Times font object created
tb1.font = "Arial 10pt";
//Times font object thrown away, new Arial object created

The way it actually works, you can just create the two fonts once, and switch between them: (again this is just pseudo code.)

Font fArial = new Font("Arial",10);  //create new Arial font object
Font fTimes = new Font("Times",10pt); //create new Times font object
tb1.font = fArial; //switch to Arial font, no new objects created
tb1.font = fTimes; //switch to Times font, no new objects created
tb1.font = fArial; //switch to Arial font, no new objects created

Hope that helps.

Jorgie