代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_C#

C#入门者对“实例方法”与“静态方法”的疑问!该如何解决

发布时间:2019-08-17浏览(692)

    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;
    }
    }

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