日期:2014-05-18  浏览次数:20879 次

C#入门者对“实例方法”与“静态方法”的疑问!
各位论坛上面的朋友:下面的静态方法和实例方法是自己GOOGLE得来的,希望有朋友可以耐心地帮忙解答自己提出来的三个问题,并且用例子来说明问题,万分感激!

静态方法:
静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量,静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变量做为参数传给静态方法。静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。


实例方法:
一个实例方法的执行与特定对象关联,他的执行需要一个对象存在。实例方法可以直接访问静态变量和实例变量,实例方法可以直接访问实例方法、和静态方法,静态方法的访问方式为类名加点操作符加变量名。当多个实例对象存在时,内存中并不是存在某个特定的实例方法的拷贝,而是,相同类的所有对象都共享每个实例方法的一个拷贝(实例方法只占用“一套”空间)。

问题:

问题1:能不能用一个例子来说明,静态方法如何不可以直接访问实例变量,但可以在实例函数调用的情况下,实例变量做为参数传给静态方法?

问题2:静态方法如何不能直接调用实例方法,但可以间接调用,另外,如何创建一个类的实例,然后通过这一特定对象来调用静态方法。请帮忙举一个例子来说明?


问题3:能不能也用一个简单的例子来说明以上的“实例方法呢?”


------解决方案--------------------
问题1:
class A{
private int var1; -> 这是实例变量,有实例的时候才有她

public static GetRes(){
return var1; -> 调用静态方法的时候不需要类型实例,没有实例就没有var1,那么这里就不能访问实例变量var1
}
}
------解决方案--------------------
//问题1
namespace cppShooter
{
public class A
{
public int x;
public int y;
public A() { }
public static int ADD(int a, int b)
{
// 不可以直接访问实例变量
// a = x;
return a + b;
}
}
public class B
{
public B()
{
A aClass = new A();
aClass.x = 10;
aClass.y = 5;

// 参数引用
Console.WriteLine(A.ADD(aClass.x, aClass.y));
}
}
}

------解决方案--------------------
静态方法是有类的时候就有的
没办法知道这个类有没有实例
也就是说,静态方法,并不知道实例变量是不是存在
当然就不能调用了


------解决方案--------------------
问题2:原理跟问题1是一样地!!

实例方法可以直接访问静态变量和实例变量
===================================================


public class A
{
public int x;
public int y;
public A() { }
public void PopAdd()
{
// 直接引用静太方法
Console.WriteLine(ADD(x, y));
}
public static int ADD(int a, int b)
{
// 不可以直接访问实例变量
// a = x;
return a + b;
}
}

回答的非常好,条理清楚,学习了。顺便帮忙顶下。