static 表示静态,它与该实例无关,在任何地方都可以使用“完全限定名”进行访问,而实例对象则不同,它属于该实例中的一个对象,该实例必须被实例化过才会存在这个对象,也必须使用实例句柄来访问它。public 和 private 是表示它的有效(作用)域,出了这个有效域(某对象是 private 且在类外访问),就算能访问(比如为 static)到也无效可见,二个是完全不同的概念,静态、非静态和 public、private 完全是二回事,一个是成员类型一个是有效范围

解决方案 »

  1.   

    public
    定義公共類型﹕變量﹑結構﹑類﹑屬性﹑方法
    private
    定義私有類型﹕變量﹑屬性﹑方法
    static
    定義靜態成員﹕就是無需實例化也可以訪問的成員
      

  2.   

    谢谢大家。可能我问题没说清楚我的意思是public class class1和class class1这里加不加public有什么区别?是不是默认的就已经加了public了?另外一个是关于static的问题,看下面这个程序注释的地方,谢谢大家,分不够可以加:using System;class Building
    {   
    private static  Elevator elevatorA;  //这里如果不加static程序编译无法通过,为什么? public static void Main()
    {
    Console.WriteLine("The simulation has commenced");
    elevatorA = new Elevator();
    elevatorA.LoadPassenger();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.InitiateNewFloorRequest();
    elevatorA.ReportStatistic();
    Console.WriteLine("The simulation has ended");
    Console.ReadLine();
    }
    }class Elevator
    {
    private int currentFloor = 0;
    private int requestedFloor = 0;
    private int totalFloorsTraveled = 0;
    private int totalTripsTraveled = 0;
    private Person passenger;        //而这里加和不加static都可以通过为什么?
     
    public void LoadPassenger()
    {
    passenger = new Person();
    }

    public void InitiateNewFloorRequest()
    {
    requestedFloor = passenger.NewFloorRequest();
    Console.WriteLine("elevatorA:Departing floor:" + currentFloor + "Traveling to floor:" + requestedFloor);
    totalFloorsTraveled =  totalFloorsTraveled + Math.Abs(currentFloor - requestedFloor);
    totalTripsTraveled = totalTripsTraveled + 1;
    currentFloor = requestedFloor;
    } public void ReportStatistic()
    {
    Console.WriteLine("Total floors traveled:" + totalFloorsTraveled);
    Console.WriteLine("Total trips traveled:" + totalTripsTraveled);
    }}class Person
    {
    private Random randomNumberGenerator;

    public Person()
    {
    randomNumberGenerator = new Random();
    } public int NewFloorRequest()
    {
    return randomNumberGenerator.Next(0,50);
    }
    }
      

  3.   

    1.  若不加public,则默认是private
    2.  实际上上面的朋友已经作了很好的解答,稍作补充。Main()必须声明为静态的,这你应该了解。假设在Building类中把elevatorA声明为类的域,为了调用该域,必须创建Building类的实例,而你在Main()函数中并没有创建Building类的实例,你还想直接调用域elevatorA,当然产生错误!你若把elevatorA声明为静态的,它就隶属于类本身,而不隶属于任何对象,这样你在Main()中直接调用就没有错误啦。
        不知对你而言能否明白,再说。
      

  4.   

    很感谢wanbaocheng(www),又明白了一点东西了,谢谢。这个问题不太懂:“public class class1和class class1 当中加不加public有什么区别?”
    各位帮忙了。
      

  5.   

    这个问题不太懂:“public class class1和class class1 当中加不加public有什么区别?”
    各位帮忙了。
      

  6.   

    回复人: wanbaocheng(www) ( ) 信誉:99  2003-12-06 16:42:00  得分:0 
     
     1.  若不加public,则默认是private--------------------------
    如不加 pubiic 就等于是写的 private class class1 
      

  7.   

    是的,我是说这里面有什么含义里头?比如 public class Class1 这个修饰成public后,怎么看出它的作用?它提供了哪些功能?好像 public class Class1 能做的事,class Class1 也能做,看不出哪里区别了。
      

  8.   

    TO snewxf(心疤) :买了一本书,我感到模糊的地方上面都不讲,所以只好来问了。
      

  9.   

    你家有椅子吗?如果你把椅子放在大街上,那就是Public,是公用的, 如果放在家里,那就是private的,是给你自己用的,呵呵,大致是这样!·
      

  10.   

    哎,谢谢大家 ,我的意思。不加public不是也可以用么?比如上面的程序里class Elevator可以用class Person里的东西
      

  11.   

    你需要知道默认的访问修饰符:
    在c#中,变量、方法在class和struct中默认是private,
    在vb中,变量、方法在class和struct中默认是public,
    在声明class时,如果没有访问修饰符,默认时public的
      

  12.   

    很感谢 LiSDN(LOCK ON),这样解释感觉没有冲突了,谢谢。其它网友解释为:在声明class时,如果没有访问修饰符,默认是private的,所以感到很困惑,谢谢大家。
      

  13.   

    晕...,class 是不能声明成 private 的,只能是public,而有必须将class 设置成private 那么可以使用private 构造,比如public class a1{
      private a1{  }
    }当a1 没有public 构造时,你是无法在类外用实例句柄调用它的
      

  14.   

    而private class 通常是存在于类中类,比如下面的b1public class a1 {
       //xxxx
      private class b1 {
       //xxxx
      }
    }
      

  15.   

    在都不写的情况下public class a1 { //默认是public
       //xxxx
      private class b1 { //默认是private
       //xxxx
      }
    }