变量:
在学习static静态变量之前,我们还是有必要来了解 变量 的意义。程序要对数据进行读、写、运算等操作,当需要保存特定的值或结果的时候就需要用到变量,在用户看来,变量是用来描述一条信息的名称,在变量中可以储存各种类型的信息,比如:人的姓名、车票的价格等等;在计算机看来,变量代表存储地址,变量是什么类型,变量中存储的数值就是什么类型。使用变量的一条重要原则就是 :变量必须先定义后使用。
在C# 中变量的定义与使用规则与C/C++类似,这里就不多说了,(所以学好C还是挺重要的^_^)
static静态变量:
带有 static 修饰符声明的变量称为静态变量,一旦静态变量所属的类被装载直到包含该类的程序运行结束时他将一直存在。static 的主要性质有两个:
1.隐藏:
在类里定义的静态方法或静态变量,属于类本身,而不属于那个类的一个对象。要想调用一个被定义为static的方法,必须在它前面加上这个类的名称。(即时是public访问修饰也不行,这也是上一篇末尾的原因) 实例方法必须通过类的实例来使用。实例方法可以使用类的非静态成员,也可以使用类的静态成员。
访问规则:
静态方法只能访问类的静态成员,不能访问类的非静态成员;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法不能使用实例来调用,只能使用类名来调用。
比如下面的例子:
class person
{
public static int i; //定义一个静态变量i 默认值是0
public int k=0; //定义一个非静态变量 k;
public static int sbu() // 定义一个静态方法
{
i = 9; //成功对静态变量赋值
k = 5; //出错了,无法访问非静态变量
return k;
//综上静态方法只能访问静态变量
}
public int Add() //定义一个实例方法
{
i = 9; //对静态变量赋值没有问题
k = 5; //对非静态变量赋值也没问题
return i;
//综上实例方法能够访问所有类型变量
}
} 我们实例化一个person一个对象对方法进行访问:
static void Main(string[] args)
{
person per = new person(); //实例化一个对象per
int i = per.i; //出错了,per访问不了类里的静态变量
int k = per.k; //没有问题
per.sbu(); //出错了,per访问不了静态方法
person.sbu(); //成功调用
per.Add(); //成功调用
person.Add(); //出错了,person访问不了实例方法
}
2.保持变量内容的持久:
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。
写个例子就知道了(这次我用C++写了)C#不允许在方法中使用static:
#include<iostream>
using namespace std;
int main()
{
for (int i=0;i<4;i++)
{
static int k =0; //定义一个静态变量并赋值为0
k++;
cout<<k<<endl; //输出
}
return 0;
}
如果上面的代码中我们去掉 static 此时k=0;变成了非静态变量,结果只会出现一个数字 1;
常量:
常量就是其质固定不变的量,从数据类型来看常量的类型可以是任意一种值类型或引用类型。一个常量的声明就是声明程序中要用到的常量名称和他的值。(用法也与C类似)但是在C#中常量一旦定义无法在改变它的值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace demo
{
class Program
{
const int S = 9; // 定义一个常量S并赋值
static void Main(string[] args)
{
S += 4; //出错了,常量一旦定义就不能改变常量的值
Console.WriteLine(S);
}
}
}