日期:2014-05-19  浏览次数:21174 次

c# 对象为null的时候,调用对象(实例)的方法
当一个对象没有实例化的时候

form1   f1;

调用f1这个实例的其他方法,我认为没有什么意义。

但是为什么调用f1.Equals方法也会错误?

我认为就算f1为null,也可以比较的。

---------------------------------------------

why?



------解决方案--------------------
只要是实例方法就没法调用,与有没有意义无关……

你可以用object.Equals方法哈。
------解决方案--------------------
f1.Equals 具体代码贴了
------解决方案--------------------
你的意思实际上是对类的静态方法的意义.

比如你可以使用使用如下的Form的静态比较方法:

bool Form.Equals(object obja, object objB)
------解决方案--------------------
只要Equals方法不是静态方法,你不实体化对象就是不行的。

------解决方案--------------------
当f1为null时, 内存中不存在Equals方法的地址
只有f1真正实例化后,内存才会Equals方法的地址,这时候调用才不会出错

------解决方案--------------------
只要没有实例化,这个对象就是不存在的,加了点的属性方法都是非法的...
------解决方案--------------------
null 不是对象.

对象只有指向一个实际的对象存贮地址才变得有意义,

如果对象=null,那么只能说明对象的实体不存在.

对于一个不存在的对象,那当然是无法调用它的实例方法的.



------解决方案--------------------
楼上的已经说了

null只是分配对象引用的内存
并没有为对象分配内存,也就是说不能访问其属性和方法,否则会异常
------解决方案--------------------
如果你要调用一个对象的成员函数,那么你需要实例化它。
否则,将它定义为静态函数,通过类名来调用。
如果你只是想比较的话,你可以用object.Equals来

form1 f1;
...
if(f1 == null)
{
...
}
else
{
...
}
------解决方案--------------------
form1 f1只是定义了一个form1类型,并没有给f1分配实际的内存空间。所以没有内存空间的f1不能进行比较。
如 form1 f1 = null;一般用在程序中尚不知道是否需要使用它。所以只定义它,待需要使用它的时候再给它分配内存空间。我想这样做是为了提高代码性能~