回 帖 发 新 帖 刷新版面

主题:初学C#,关于静态数据成员/静态方法的疑惑。

关于静态数据成员和静态方法的疑问:
1.静态数据成员。
静态数据成员,从我的书上看,意思就是某个类中声明static的数据成员之后,所有实例都共享同一个“值”。在使用该成员时,因为该成员不属于任何对象,只属于类,所以应该使用:类型.成员名 来访问。

那么我想问:
a.实际上,静态数据成员就是说,不用实例化,我也可以访问呢?但是不对啊,没有实例化的话,类本身已经分配了内存了吗?
b.静态数据成员是不是说所有的实例都共享同一个该成员的内存空间呢?

2.静态方法:
这个是重点,是我最搞不懂的,可能是我的书太破了。
a.书上给了个例子:
//Myapp
using System;
class Myapp
{
  static long multy(long nbr1,long nbr2)
  {
   return nbr1 * nbr2;
  }
  public static void Main()
 {
  long x;
  long y;
  long result;
  result = multy(x,y);
  Console.WriteLine("The result of x multy y is :{0}",result);
 }
}
书上说,之所以使用static方法,是因为multy和Main方法位于同一个类(应用程序类Myapp)中,这样声明使得Multy方法在任何地方都可以调用,当然在Main()方法中也可以调用。
太简单了,这个说明。然后我自己去查了下静态方法的资料。得到如下资料:
“函数成员:
方法可以主要分为静态方法,实例方法

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

实例方法:一个实例方法的执行与特定对象关联,他的执行需要一个对象存在。实例方法可以直接访问静态变量和实例变量,实例方法可以直接访问实例方法、和静态方法,静态方法的访问方式为类名加点操作符加变量名。当多个实例对象存在时,内存中并不是存在美个特定的实例方法的拷贝,而是,相同类的所有对象都共享每个实例方法的一个拷贝(实例方法只占用“一套”空间)。 ”
静态方法是不属于特定对象的方法,这我能理解。
静态方法可以访问静态成员变量,不可以直接访问实例变量。
这句有问题了,如上面的例子,在应用程序类运行后,不是生成了实例了吗,里面的X,Y不是实例变量吗?何为直接访问?
是不是形如:
class Myapp
{
 int x,y;

 static long multy()
 {
  //int x,y;  
  return x * y;
 }
 public static void Main()
 {
  //Method body...
 }
}
这种叫直接访问?
那么我想问,如果去掉例子2的局部变量声明,multy在使用自己的局部变量的时候有问题吗?
b."可以在实例函数调用的情况下,实例变量做为参数传给静态方法。"什么叫实例函数调用?不明白。
c.“静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。”这句更糊涂了。

回复列表 (共2个回复)

沙发

静态的意思可能你有所理解偏差
区别于动态变量,静态变量并不是不变的,只是静态变量在声明的时候不管有没有赋值,都会根据它的类型分配对应的内存空间,他的可访问性和作用区间与动态变量是一样的

板凳

静态成员可以理解为仓库,一旦建成是不能拆除的,你可以往里面放东西和取东西

动态成员可以理解为地摊,可以随便建立和拆除,同时也可以随便存放东西

我来回复

您尚未登录,请登录后再回复。点此登录或注册