something about "static "

静态成员(包括静态方法),是属于class的,而不是属于这个class的某个实例。
比如说整数类,我可能需要输出整数类的某个实例的值的大小,还有可能要获取整数类能代表的最大值。其中“整数类的最大值”就不是属于某个特定的整数类的实例,而是属于整数类的,这样获取“整数类的最大值”的方法就必须是静态的。比如:
class Integer {
    int value;
    public static int Maximun() {...}  // 获取整数类的最大值
    public void Print() {...}  // 打印该整数值的大小
}
正是因为Maximun不是属于具体的某个整数类的实例,所以你才不能这样写:
Integer i = new Integer();
System.Console.WriteLine(i.Maximun());
而只能用Integer.Maximun()。
也正因为静态方法是属于整个类的,所以在静态方法中,你也只能使用静态的字段(它们也是属于整个类的),而不能使用依赖与某个特定的实例的字段(也就是非静态的字段),因为静态方法不依赖于某个具体的实例。

再举个例子:
比如说“人”这个类,每个人都有姓名、年龄、性别、身高等,这些属性就应该是非静态的,因为每个人都的这些属性都不相同;但人在生物学上属于哪个门哪个纲哪个目等,这个属性是属于整个人类,所以就应该是静态的——它不依赖与某个特定的人,不会有某个人是“脊椎动物门哺乳动物纲灵长目”而某个人却是“偶蹄目”的:)

方法占不占用更多内存,和它是不是static没什么关系。
因为字段是用来存储每个实例对象的信息的,所以字段会占有内存,并且因为每个实例对象的状态都不一致(至少不能认为它们是一致的),所以每个实例对象的所以字段都会在内存中有一分拷贝,也因为这样你才能用它们来区分你现在操作的是哪个对象。
但方法不一样,不论有多少个实例对象,它的方法的代码都是一样的,所以只要有一份代码就够了。因此无论是static还是non-static的方法,都只存在一份代码,也就是只占用一份内存空间。
同样的代码,为什么运行起来表现却不一样?这就依赖于方法所用的数据了。主要有两种数据来源,一种就是通过方法的参数传进来,另一种就是使用class的成员变量的值……


静态的方法,只能访问静态的成员。不能访问实例成员。
比如说,一个类User
里面有一个字段userName
如果你用静态的字段(static string)
那么如果想同时拥有两个UserNaem不同的User的实例,怎么办呢?
所以说
不一定要全部声明为静态的,或者实例的
要根据实际情况来进行分析

一段教材式的代码:

using System;
using System.Collections;

public class MyClass

 int x;
 static int y;
 void F()
 {
 x=1;
 y=1;
 }
 static void G()
 {
  x=1; ///?????????????????????????为什么这里不能付值?
  y=1;
 }
 public static void Main()
 {
  MyClass t= new MyClass();
  t.x=1;
  //t.y=1;
  //MyClass.x=1;
  MyClass.y=1;
 }
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值