第一个问题:
Vector()在C#里属于Array Types,Array Types属于Reference Type。
一个Reference Type分为两个部分,一个有名字的句柄,在你的代码里就是x,一个没有名字的对象实例,就是new Vector()。
x本身并不是Vector()的实例,它只是指向一个Vector()的实例罢了。分配空间、创建对象实例和指向过程在这里由new完成。
表达不行,不知道你明白了吗第二个问题:
Shape ss = new 方();方 ss = new 方()都是可以的。
Vector()在C#里属于Array Types,Array Types属于Reference Type。
一个Reference Type分为两个部分,一个有名字的句柄,在你的代码里就是x,一个没有名字的对象实例,就是new Vector()。
x本身并不是Vector()的实例,它只是指向一个Vector()的实例罢了。分配空间、创建对象实例和指向过程在这里由new完成。
表达不行,不知道你明白了吗第二个问题:
Shape ss = new 方();方 ss = new 方()都是可以的。
Vector x=new Vector();可以分解为三句话:
1 Vector x;
2 new Vector(); //此时new出来的变量会被存放到一个未命名的指针下
3 x=未命名指针;//指向未命名的指针所指向的地址此时x便指向了new出来的变量的地址
第二个问题:
现在你只有"ss"类和"方"类,自然看不出有什么不一样的.
但是如果你现在有了一个"我的方"类:
public class 我的方 : Shape
此时便可以通过Shape的指针指向"方"或者"我的方"类
假如在"Shape"类中写了一个
public void Draw()
{
this.draw();
}
protected void draw()
{
Console.Writeln("Shape");
}
那么"方"或者"我的方"将会调用Draw()方法.如果你在"方"或者"我的方"中各实现了draw()方法,那么在调用Draw()的时候,它们将进入各自的draw()方法中,这样便实现了多态.
"方"类中的draw():
protected void draw()
{
Console.Writeln("方");
}
"我的方"类中的draw():
protected void draw()
{
Console.Writeln("我的方");
}
在两个类中不必重写Draw()这样,在
Shape 方1=new 方();
Shape 我的方1 = new 我的方();
那么调用方1.Draw();和调用我的方1.Draw();所得的结果分别是"方"和"我的方"