C# static的用法(非常详细,附带实例)
与 Java 的 static 相比,C# 语言的 static 限制比较多,例如,其无法由实体对象引用。
static 可以解释为静态,可以应用在类、字段、方法等上。如果是静态成员,此成员属于类本身,而不是特定的对象,C# 编译程序会为此类的静态成员创建一个固定的内存空间。
下列是 static 关键词应用在类的字段与方法声明上时的语法:
定义静态类时的语法如下所示:
【实例 1】:一家公司的业绩是由所有业务员的业绩求和得到的,这个程序会要求分别输入两个业务员的业绩,然后程序会输出公司的业绩。
【实例 2】输入新学生的姓名、学号和原先的学生人数,然后输出学生累计的人数。
【实例 3】千米与英里互相转换的应用。
使用静态构造方法时,需注意下列两点:
【实例 4】静态构造方法的应用,从这个实例可以看到创建两次 MyTest 类对象,只有第一次创建类对象时调用了静态构造方法。
static 可以解释为静态,可以应用在类、字段、方法等上。如果是静态成员,此成员属于类本身,而不是特定的对象,C# 编译程序会为此类的静态成员创建一个固定的内存空间。
下列是 static 关键词应用在类的字段与方法声明上时的语法:
class 类名称
{
存取修饰词 static 数据类型 域名;
…
存取修饰词 static 数据类型 方法名称;
}
定义静态类时的语法如下所示:
class static 类名称
{
存取修饰词 static 数据类型 域名;
…
存取修饰词 static 数据类型 方法名称;
}
C#类中的静态字段
当类含有静态字段时,表示此字段是此类所有对象共享的内存空间,使用 new 创建的对象无法直接引用此静态字段,需要通过类的方法间接引用。【实例 1】:一家公司的业绩是由所有业务员的业绩求和得到的,这个程序会要求分别输入两个业务员的业绩,然后程序会输出公司的业绩。
Revenue p1 = new Revenue();
Console.Write("请输入业务员 p1 的业绩:");
int rev = Convert.ToInt32(Console.ReadLine());
p1.Money += rev; // 业务员 p1 业绩
p1.PrintInfo();
Revenue p2 = new Revenue();
Console.Write("请输入业务员 p2 的业绩:");
rev = Convert.ToInt32(Console.ReadLine());
p2.Money += rev; // 业务员 p2 业绩
p2.PrintInfo();
public class Revenue
{
public static int _money;
public int Money
{
get => _money;
set => _money = value;
}
public void PrintInfo()
{
Console.WriteLine($"深智总业绩:{_money}");
}
}
执行结果为:
请输入业务员 p1 的业绩:10000
深智总业绩:10000
请输入业务员 p2 的业绩:25000
深智总业绩:35000
C#类中的静态方法
关键词 static 可以应用在方法中,当在类内声明静态方法后,此静态方法只能让类名称引用,无法被 new 所创建的类对象引用,然后此静态方法可以存取或操作类的静态变量。【实例 2】输入新学生的姓名、学号和原先的学生人数,然后输出学生累计的人数。
Console.Write("请输入新学生姓名:");
string name = Console.ReadLine();
Console.Write("请输入新学生学号:");
string id = Console.ReadLine();
Student e = new Student(name, id);
Console.Write("请输入原先学生人数:");
string n = Console.ReadLine();
Student.studentCounter = Int32.Parse(n); // 转换字符串为整数
Student.AddStudent();
Console.WriteLine($"Name: {e.name}");
Console.WriteLine($"ID: {e.id}");
Console.WriteLine($"学生总人数:{Student.studentCounter}");
public class Student
{
public string id;
public string name;
public static int studentCounter; // 学生人数
public Student(string name, string id)
{
this.name = name;
this.id = id;
}
public static int AddStudent() // 累计学生人数
{
return ++studentCounter;
}
}
执行结果为:
请输入新学生姓名:Jin-Kwei Hung
请输入新学生学号:651014
请输入原先学生人数:28
Name: Jin-Kwei Hung
ID: 651014
学生总人数:29
Student.studentCounter = Int32.Parse(n);第 13 行使用了类名称,取得静态字段的信息:
Student.studentCounter在顶级语句的第 9 行,使用类名称加上静态方法,操作静态变量,此操作其实就是在累计学生人数:
Student.AddStudent();
C#静态类
所谓的静态类就是一个类只能有静态字段或是静态方法,此静态类不可以有对象,同时无法被继承。操作静态字段或是方法,必须使用静态类名称。【实例 3】千米与英里互相转换的应用。
Console.WriteLine("请选择距离转换方式");
Console.WriteLine("1. 英里转千米");
Console.WriteLine("2. 千米转英里");
Console.Write("\n==> ");
string selection = Console.ReadLine();
switch (selection)
{
case "1":
Console.Write("请输入英里:");
double K = Converter.MileToKm(Console.ReadLine());
Console.WriteLine($"公里:{K:F2}");
break;
case "2":
Console.Write("请输入千米:");
double M = Converter.KmToMile(Console.ReadLine());
Console.WriteLine($"英里:{M:F2}");
break;
default:
Console.WriteLine("输入错误!!!");
break;
}
public static class Converter
{
public static double MileToKm(string mi) // 英里转千米
{
double mile = Double.Parse(mi);
double km = mile * 1.609;
return km;
}
public static double KmToMile(string k) // 千米转英里
{
double km = Double.Parse(k);
double mile = km / 1.609;
return mile;
}
}
执行结果为:
请选择距离转换方式
1. 英里转千米
2. 千米转英里
==> 1
请输入英里:10
千米:16.09
C#静态构造方法
静态构造方法主要用于初始化静态字段,不论创建多少个对象此静态构造方法只能执行一次,这个方法可以在创建第一个实体对象前先被执行。使用静态构造方法时,需注意下列两点:
- 静态构造方法不能有存取修饰词或参数;
- 程序不可以调用静态构造方法。
【实例 4】静态构造方法的应用,从这个实例可以看到创建两次 MyTest 类对象,只有第一次创建类对象时调用了静态构造方法。
MyTest A = new MyTest();
A.PrintInfo();
Console.WriteLine("测试");
MyTest B = new MyTest();
B.PrintInfo();
class MyTest
{
static int price;
static MyTest() // static constructor
{
Console.WriteLine("Static Constructor");
price += 10;
}
public MyTest() // 一般constructor
{
Console.WriteLine("一般Constructor");
price += 5;
}
public void PrintInfo()
{
Console.WriteLine(price);
}
}
执行结果为:
Static Constructor
一般Constructor
15
测试
一般Constructor
20
ICP备案:
公安联网备案: