万物皆对象,这个是面向对象的概念,也就是中心理论.
new 对象就是实例化对象
student stu = new student();
//这就话就是创建了一个学生类的对象,
当然这个类,是自己写的
在等号左边student stu,这个东西叫做引用,意思就是告诉系统你需要一个student的类,但是这只是你告诉了系统需要一个对象,而在系统的内存中并没有给你创建这个对象的存放空间,
如果你想要有一块空间在内容中来存储你的student这个类的话就需要"new"对象
也就是new student();
//记住一句话,等号左边的是引用,右边的是实体
引用只是指向对象的一个标记,而我们要用的对象确实对象的实体,如果你这样写
student stu;
这样就是创建了一个类的引用,并没有给这个类实体,在没有给类实体的情况下使用的话,系统就是报错误"空引用对象"
实例化时候的那个new用于创建对象和调用构造函数。这就是它的用途了。如果不是实例化时候调用的new那是有其它含义的。比如可以用于向基类成员隐藏继承成员。
int,float,char等等是预定义的值类型,存放于堆栈中。string虽然是预定义的引用类型,存放于堆中。c#为了使语义遵循一般的,直观的字符串规则,对字符串的运算符(如"+"运算符)进行了重载。
总结一下。值类型存放于堆栈,不用实例化。引用类型存放于堆,需要用new运算符实例化。为什么string不用实例化呢。其实string是披着羊皮的狼。由于作了特殊处理,string
s="大便";这条语句编译器会认为是与string
s=new
string("大便");等效的。
将类实例化后,才可用用 实例名.xxxx
点出该类里的非静态成员
对于静态成员,不用实例化就能用,用法是
类名.xxxx
比如有个类
class Human
{
int age;
string sex;
string name;
public Human//无参构造函数
{....}
public Human(....参数)//有参构造函数
{....}
public int GetAge(string name)
{....}
public static string GetSex(string name)
{....}
}
要使用Human类里的GetAge方法,要这样
Human myGF = new Human();
myGF.GetAge("章子怡");
而要使用类里的GetSex方法,应该这样
Human.GetSex("章子怡");因为这个方法是静态的,可以直接用类名点出来,不用实例化它后用它的一个实例去点。
实例化就是 新建一个满足次类所有属性的一个对象(。。。有点不知咋说) 比如你有一个学生类 你可以new出一个 张三这个实际的对象 而不是学生这个概念 这样你就可以对张三进行初始化 调用等等操作了
类在被实例化之前就相当与只是一个房子的蓝图,而被实例化后的对象才是真正房子。
new 关键字就是开辟堆内存。对象才是正在存在的实体。类和对象之间的关系需要好好揣摩,祝你成功。