为何创建两个C#类实例时私有变量num仅递增一次?
问题:类实例的私有变量无法跨实例累计递增
我编写了一个Program1类,并创建了两个该类的实例,但私有变量num每次输出都是1,无法实现累计递增。以下是我的代码及控制台输出:
原代码
using System; Program1 one = new Program1("name1"); Program1 two = new Program1("name2"); class Program1 { private int num = 0; public Program1(string name) { num++; Console.WriteLine($"It is your {num} object"); Console.WriteLine($"{name} is your object"); } }
控制台输出
It is your 1 object name1 is your object It is your 1 object name2 is your object
原因分析
你定义的num是实例字段,每个Program1的实例都会独立拥有一个num的副本。每次创建新实例时,这个副本都会被重新初始化为0,随后在构造函数里自增为1,因此每个实例输出的num值都是1。
解决方案
如果需要让num统计所有实例的创建数量,只需将num改为静态字段(添加static修饰符)。静态字段属于类本身,所有实例共享同一个值,不会随新实例创建而重新初始化:
using System; Program1 one = new Program1("name1"); Program1 two = new Program1("name2"); class Program1 { // 改为静态字段,所有实例共享 private static int num = 0; public Program1(string name) { num++; Console.WriteLine($"It is your {num} object"); Console.WriteLine($"{name} is your object"); } }
修改后的控制台输出:
It is your 1 object name1 is your object It is your 2 object name2 is your object
内容的提问来源于stack exchange,提问作者pyleky11
相关产品推荐
相关产品推荐

