gpt4 book ai didi

c# - 实例变量在实例化后重置为默认值

转载 作者:行者123 更新时间:2023-11-30 14:49:37 32 4
gpt4 key购买 nike

我创建了一个类来保存一些电子邮件数据:

public class EmailClass{
public string sender;
public string receiver;
public string message;

public EmailClass(string sender, string receiver, string message){
this.sender = sender;
this.receiver = receiver;
this.message = message;
}

public string Sender { get; set; }
public string Receiver { get; set; }
public string Message{ get; set; }
}

在我的 Web 应用程序中,我有一个页面:MyHome.aspx.cs(在与 EmailClass 相同的命名空间中创建):

public partial class MyHome: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
EmailClass obj = new EmailClass("sender", "receiver", "a message");
Response.Write("Info: " + obj.Sender + " " + obj.Receiver + " " + obj.Message);
}
}

加载 Home.aspx 时我期望的是显示:

Info: sender receiver a message

但是,它显示

Info: 

当我尝试在页面加载中访问它们时,EmailClass 中的实例变量似乎已重置为其默认值。出于调试目的,我添加了一个 MessageBox 来显示构造函数中的实例变量值(调用构造函数并在实例化期间设置值)。

我的问题:那么是什么导致实例变量的值被重置/不显示?

注意:当我显式设置对象的值时,它确实会在页面加载期间显示出来。即:obj.Sender = "sender";

最佳答案

您混淆了字段自动实现的属性this.senderthis.Sender 不同。使用自动实现的属性时不需要这些字段。这些字段由编译器生成。

这将解决它:

public class EmailClass
{
public EmailClass(string sender, string receiver, string message)
{
this.Sender = sender;
this.Receiver = receiver;
this.Message = message;
}

public string Sender { get; set; }
public string Receiver { get; set; }
public string Message{ get; set; }
}

如果你想自己实现字段,你可以这样做:

public class EmailClass
{
private string sender;
private string receiver;
private string message;

public EmailClass(string sender, string receiver, string message)
{
this.sender = sender;
this.receiver = receiver;
this.message = message;
}

public string Sender
{
get { return this.sender; }
set { this.sender = value; }
}
public string Receiver
{
get { return this.receiver; }
set { this.receiver = value; }
}
public string Message
{
get { return this.message; }
set { this.message = value; }
}
}

所以,要么是第一种方式,要么是第二种方式。第二种方法仅在验证 setter 中的值或引发 INotifyPropertyChanged 事件时有用。

关于c# - 实例变量在实例化后重置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38484232/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com