WEB 开发 开发语言 Java 技术 .Net 技术 数 据 库 硬件使用
图象媒体 Linux/Unix 移动平台 嵌入开发 Windows 专区 软件工程
Ajax 技术 | ASP | PHP | ASP.NET | C# | JSP | Access | Oracle | 网页设计 | Flash | 安全专题 | IIS | VC/MFC | Delphi | C/C++
 你的位置:首页 > .Net 技术 > 其他

谁来解释一下static的具体用法呢?
[ 来源:ITWENKU 时间:2007-4-17 23:09:55 | 浏览:222人次 ]

1.在函数前面

2.在变量前面


static 在函数前面时,不需对类进行实例化就可以调用函数.(其实这里应当是方法).比如你有一个数字转中文大写的方法,就可以定义它为static ChangeNumberToHZ(),这样在程序其它地方需要这个方法时,就不用每次都实例化这个类了.

static在变量前,这个变量如果是public的,那么相当于全局变量,因为一旦调用了这个变量,那么在应用程序运行期间,这个变量值一直是可以在任何模块中取得到的,而不用管变量所在类是否实例化,也不用管它的生命周期.

简单如些,以上只是列出两个例子.


还有人回答吗???谢谢


在C#中,所有的方法和变量都写在类中,所以要调用这些方法和变量时,必须先实例化这个类。
这样一来,就有些麻烦了。比如我只需要使用类中的一个方法,但是却要先实例化一个类,所以就有了static。如果你把函数或变量前加上static的话,那么就可以直接用 类名.函数名() 或是 类名.变量名 来调用这些函数和变量了。


一般说来,静态成员属于类所有;非静态成员属于类的实例—对象。
调用静态成员则不须得到类的实例,直接使用类名即可;而在调用非静态成员时,必须先得到类的实例。
无论一个类创建多少个副本,一个静态成员在内存中只占有一块区域。
每创建一个类的实例,都在内存中为非静态成员开辟一块区域。



另,静态方法属于类,不属于类的实例。
非静态方法可以访问类中的任何成员,而静态方法只能访问类中的静态成员。


static int i = 0;


如果一个变量或函数声明为 static 的话,这个变量(函数)在程序启动时就会被分配了空间,并一直到程序结束才消亡。

如果在类中一个成员被声明成务static类型的话,那么也就表明这个成员在程序中只存在一份拷贝,这个类的所有实例都共享同一份数据。

实际上,static的实现是在程序的编译期间,在程序的data segment 中只保存一个static data member的实体,每次程序调用static member时,都是对该外部实体的直接操作。


使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。例如,下面的类声明为 static,并且只包含 static 方法。


static class CompanyEmployee
{
public static string GetCompanyName(string name) { ... }
public static string GetCompanyAddress(string address) { ... }
}


有关更多信息,请参见静态类和静态类成员(C# 编程指南)。

备注
常数或者类型声明隐式地是静态成员。

不能通过实例引用静态成员。然而,可以通过类型名称引用它。例如,请考虑以下类:

复制代码
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}


若要引用静态成员 x,请使用完全限定名(除非可从相同范围访问):

复制代码
MyBaseC.MyStruct.x


尽管类的实例包含该类所有实例字段的单独副本,但每个静态字段只有一个副本。

不可以使用 this 来引用静态方法或属性访问器。

如果对类应用 static 关键字,则该类的所有成员都必须是静态的。

类(包括静态类)可以有静态构造函数。在程序开始和实例化类之间的某个时刻调用静态构造函数。

注意
static 关键字在使用上比在 C++ 中有更多的限制。若要与 C++ 关键字比较,请参见 static。


为了说明静态成员,请看一个表示公司雇员的类。假设该类包含一种对雇员计数的方法和一个存储雇员数的字段。该方法和字段都不属于任何实例雇员,而是属于公司类。因此,应该将它们声明为此类的静态成员。

示例
该示例读取新雇员的名称和 ID,逐个增加雇员计数器并显示新雇员的有关信息以及新的雇员数。为简单起见,该程序从键盘读取当前的雇员数。在实际的应用中,应从文件读取此信息。

复制代码
// cs_static_keyword.cs
using System;

public class Employee
{
public string id;
public string name;

public Employee()
{
}

public Employee(string name, string id)
{
this.name = name;
this.id = id;
}

public static int employeeCounter;

public static int AddEmployee()
{
return ++employeeCounter;
}
}

class MainClass : Employee
{
static void Main()
{
Console.Write("Enter the employee's name: ");
string name = Console.ReadLine();
Console.Write("Enter the employee's ID: ");
string id = Console.ReadLine();

// Create and configure the employee object:
Employee e = new Employee(name, id);
Console.Write("Enter the current number of employees: ");
string n = Console.ReadLine();
Employee.employeeCounter = Int32.Parse(n);
Employee.AddEmployee();

// Display the new information:
Console.WriteLine("Name: {0}", e.name);
Console.WriteLine("ID: {0}", e.id);
Console.WriteLine("New Number of Employees: {0}",
Employee.employeeCounter);
}
}


输入

Tara Strahan
AF643G
15


示例输出

Enter the employee's name: Tara Strahan
Enter the employee's ID: AF643G
Enter the current number of employees: 15
Name: Tara Strahan
ID: AF643G
New Number of Employees: 16


此示例显示:虽然可以用另一个尚未声明的静态字段实例化一个静态字段,但只要给静态字段显式赋值后,结果才是确定的。

复制代码
// cs_static_keyword_2.cs
using System;
class Test
{
static int x = y;
static int y = 5;

static void Main()
{
Console.WriteLine(Test.x);
Console.WriteLine(Test.y);

Test.x = 99;
Console.WriteLine(Test.x);
}
}


输出

0
5
99




简而言之:
加了static就说明这是“类的属性或方法”否则就是“类的实例的属性或方法”。

前者只要通过“类名.属性或方法名”就可以访问但是在属性或方法体内不能访问对象实例;

后者需要通过“实例引用.属性或方法”访问并且可以在属性或方法体内用“this”访问对象实例。




复制的不要,结贴

 相关文章
·一道小学数学题,大家测测智商
·关于VS.NET安装部署的问题,求各位交流
·问一下 MSDN帮助文档是不是统一的?
·哪里有vs.net2003下载啊
·从Excel导入SQL Server时的一个问题
·VS2003 与VS2005 混装问题

 推荐文章
求中心数据库和异地多连锁店数据库的数据进行同步的方案
谁来解释一下static的具体用法呢?
用C++/CLI写的代码可以用什么代码检查工具啊?
一道小学数学题,大家测测智商
再次提问:。net安装以后,运行别的程序,出现:just-in-time错误
直接Release编译碰到的问题
关于VS.NET安装部署的问题,求各位交流
急,求助一个vs2005.net安装问题
问一下 MSDN帮助文档是不是统一的?
vs2005.net安装问题
怎样在vs 2005上安装wtl库
VS2003 与VS2005 混装问题
 版权所有:IT问库
copyright © 2006 www.itwenku.cn all rights reserved.