static关键字我很是混淆:
  static 方法能访问非static 数据成员吗?
  static 方法能调用非static 方法吗??
  static 方法与static数据成员以及其他static 方法的关系是什么样的呢???

解决方案 »

  1.   

    我主要还是不明白其中的机制,比如,什么样的函数应该声明为static的??
      

  2.   

    直接用类调用的函数就要静态的了~
    比如MessageBox.Show()
    show()这个方法就是静态的了如果它不是,就要用实例引用
    假设:
    MessageBox a = new MessageBox()
    a.Show()
    (只是假设一下~其实不是这样的~~~)
      

  3.   

    static 方法能访问非static 数据成员吗?
     // 不能static 方法能调用非static 方法吗??
     // 不能static 方法与static数据成员以及其他static 方法的关系是什么样的呢???
     // 没有一定的非逻辑联系我觉得对于一些和具体对象无关的数据/方法可以声明成static, 就像Image.FromFile方法, 是从文件读取一个图像文件返回Image对象, 那么它就不需要通过调用一个具体Image对象的方法来实现, 所以可以声明成static
      

  4.   

    static成员在类装载时就被初始化,可以通过类名来访问而不用生成对象,其作用有点想全局类型
    一般是在其他的方法中来调用他
      

  5.   

    楼主,不论是java还是.NET的书上说的static方法中不能访问飞static成员,但是这种说法不准确,只能说我们不能在static方法中,直接访问非static成员,间接访问是可以的,比如:
    using System;
    class A{
    int x=1;
    public static void PP(ref int y){
      y=2;
    }
    public void PrintX(){
        new A().PP(ref x);
        Conosle.WriteLine(x);
    }
    public static void Main(){
        this.PrintX();
    }
    }
    上面的结果会输出2。
      

  6.   

    using System;
    public class A{
    public delegate void P();
    P p1;
    public A(){
        p1=new P(print);
    }
    public static void PP(P p2){
      p2();
    }
    public void print(){
        Console.WriteLine("OK");
    }
    public static void Main(){
        A a=new A();
        A.PP(a.p1);
    }
    }结果:输出  OK
      

  7.   

    不好意思,前面讲静态方法间接使用非静态字段的例子,我复制错了,现更正如下:
    using System;
    class A{
    int x=1;
    public static void PP(ref int y){
      y=2;
    }
    public void PrintX(){
        A.PP(ref x);
        Console.WriteLine(x);
    }
    public static void Main(){
        new A().PrintX();
    }