new 表示实例化一个类。
比如有一个类叫汽车。你现在想在程序中买一辆,所以你用new来买了一辆汽车,这辆车你得给你找个名字,比如宝马。呵呵所以就成
汽车 宝马 = new 汽车
你有钱了,你要再来一辆:汽车 奔驰 = new 汽车
但他们都有汽车该有的东西:四个轮子,一个方向盘,发动机,车门。所以都是汽车一类的东西。
c#的本质,可以这样表达,c#所有东西全都是类,一个继承另一个,子类继承父类。
连string都是个类。申明一个字符串变量,就是实例化一个string类。
实例化类这个嘛不是c#才有问题,是面向对象的问题。
一个包装好了的功能的代码块就可以作为一个类。但你不能直接用它,因为面向对象概念中是不允许随便修改类的内容的。要用你就要实例化。就像汽车这个类。你要用行,但你不能改了汽的一些基本性质上的东西。比如你不能让四个轮子变成只有两个。你不能却掉方向盘。但是你不甘心啊,所以你实例化了,系统就给你一个类似于汽车镜像一样的汽车,他有了汽车通有的东西。你自己给他一个名字,以后你就可以随意让车开开停停,改改装装,你说我要加一排灯行,你可以加在你的实例上,但不要加到类上,因为你一加到类上了,别人实例化了的汽车也有一排的灯了,人家又不喜欢怎么办呢。
其实你申明字符串变量的时候一般没有用到new因为这种东西有点儿不一样,系统准许你不用new来声明,直接用:“string 变量名”就行了,但用new也没有错,一样是可以的。
c#就是有强大的类库,什么意思呢,就是基本上所有你要完成的程序都可以用c#类库(有很多很多类),实例化你要用的。拼起来就行了。绝大多数类还是要用new的。
(剖析简单深刻,感谢amu945。)
另外,补充重要的一点:
new会在堆内存中开辟空间并初始化,而后将其引用返回。如果不用new,比如:car c1;那么实际上c1只是栈上的一个标记而已(应该是4个字节吧),而没有完整的内容。