C#代码后置中如何在同一命名空间的另一个类里引用公共变量?
如何在同一命名空间的另一个类中引用页面类的公共实例变量
嘿,我来帮你解决这个问题~你遇到的核心问题是:numAnswers是benchmark类的实例成员(非静态),而你尝试直接通过类名benchmark.numAnswers访问,这在C#里是不允许的——实例成员必须通过类的具体实例来访问,而不是类本身。
下面给你两种可行的解决方案,还有一些关键注意事项:
方案1:传递benchmark实例给BenchmarkAdd(推荐)
这是最安全、符合面向对象设计的方式,因为ASP.NET页面类(比如你的benchmark)每个请求都会创建一个新实例,传递实例能确保你访问的是当前请求对应的numAnswers值。
修改方式一:给GetScore方法添加参数
namespace CADE.results { public partial class benchmark : BasePage { // 建议把string改成int,因为你要做自增操作,string不能直接用++ public int numAnswers = 0; protected void Page_Load(object sender, EventArgs e) { BenchmarkAdd bma = new BenchmarkAdd(); // 传递当前页面实例this给GetScore方法 bma.GetScore(this); } } public class BenchmarkAdd { public BenchmarkAdd() { } // 接收benchmark实例作为参数 public void GetScore(benchmark pageInstance) { // 通过实例访问numAnswers并自增 pageInstance.numAnswers++; } } }
修改方式二:通过构造函数注入实例
如果BenchmarkAdd需要多次使用benchmark的实例,这种方式更简洁:
namespace CADE.results { public partial class benchmark : BasePage { public int numAnswers = 0; protected void Page_Load(object sender, EventArgs e) { // 创建BenchmarkAdd时传入当前页面实例 BenchmarkAdd bma = new BenchmarkAdd(this); bma.GetScore(); } } public class BenchmarkAdd { // 保存页面实例的私有字段 private readonly benchmark _pageInstance; // 构造函数接收实例 public BenchmarkAdd(benchmark pageInstance) { _pageInstance = pageInstance; } public void GetScore() { _pageInstance.numAnswers++; } } }
方案2:将numAnswers改为静态变量(谨慎使用)
如果你确定numAnswers是全局共享的(比如整个应用只需要一个统一值),可以把它改成静态成员,这样就能直接通过类名访问:
namespace CADE.results { public partial class benchmark : BasePage { // 添加static关键字,将成员变为类共享 public static int numAnswers = 0; protected void Page_Load(object sender, EventArgs e) { BenchmarkAdd bma = new BenchmarkAdd(); bma.GetScore(); } } public class BenchmarkAdd { public BenchmarkAdd() { } public void GetScore() { // 直接通过类名访问静态变量 benchmark.numAnswers++; } } }
⚠️ 重要提醒:ASP.NET中静态变量会在应用域内共享,所有用户的请求都会共用这个值,很容易导致数据混乱(比如用户A的操作会影响用户B的numAnswers),除非你真的需要全局共享状态,否则强烈不推荐这种方式。
额外小纠正
你原来的代码里numAnswers是string类型却尝试用++自增——这在C#里是编译错误的,因为++运算符只适用于数值类型。所以建议把numAnswers改成int类型,这样自增操作才合法。
内容的提问来源于stack exchange,提问作者Velocedge
相关产品推荐
相关产品推荐

