您的位置:首页 > 编程语言 > C#

c#基础知识---静态成员

2018-01-21 17:29 302 查看
我们可以使用 static 关键字把类成员定义为静态的。当我们声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本。

关键字 static 意味着类中只有一个该成员的实例。

1.静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创建类的实例来获取。静态变量可在成员函数或类的定义外部进行初始化。你也可以在类的定义内部初始化静态变量。

下面的实例演示了静态变量的用法:
using System;
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s1 = new StaticVar();
StaticVar s2 = new StaticVar();
s1.count();
s1.count();
s1.count();
s2.count();
s2.count();
s2.count();
Console.WriteLine("s1 的变量 num: {0}", s1.getNum());
Console.WriteLine("s2 的变量 num: {0}", s2.getNum());
Console.ReadKey();
}
}
}


当上面的代码被编译和执行时,它会产生下列结果:
s1 的变量 num: 6
s2 的变量 num: 6


2.你也可以把一个成员函数声明为 static。这样的函数只能访问静态变量。静态函数在对象被创建之前就已经存在。下面的实例演示了静态函数的用法:
using System;
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public static int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s = new StaticVar();
s.count();
s.count();
s.count();
Console.WriteLine("变量 num: {0}", StaticVar.getNum());
Console.ReadKey();
}
}
}


当上面的代码被编译和执行时,它会产生下列结果:
变量 num: 3



笔记:

将类成员函数声明为public static无需实例化即可调用类成员函数
using System;

namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int num = AddClass.Add(2, 3);  //编译通过
Console.WriteLine(num);
}
}

class AddClass
{
public static int Add(int x,int y)
{
return x + y;
}
}
}

反之,如果不声明为static,即使和Main方法从属于同一个类,也必须经过实例化
using System;

namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int num = Add(2, 3);  //编译错误,即使改为Program.Add(2, 3);也无法通过编译
Console.WriteLine(num);
}

public int Add(int x, int y)
{
return x + y;
}
}
}
using System;

namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
Program self = new Program();
int num = self.Add(2, 3);  //编译通过
Console.WriteLine(num);
}

public int Add(int x, int y)
{
return x + y;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#