c# - 通过 C# Getter Setter 属性获取值返回 Null
问题描述
我有一个Login.cs
类,我在其中设置了如下属性。
private string Username_;
private string Password_;
public string UserName
{
get => Username_;
set => Username_ = value;
}
public string Password
{
get => Password_;
set => Password_ = value;
}
并将两个属性的值设置在同一类中,如下所示。
UserName = "admin";
Password = "admin";
其中Username_
&Password_
都是string
s。现在我有另一个Usercontrol
我正在访问的MainWindow
按钮单击,如下所示。
<vm:ViewUsers x:Name="ViewAllUsers" Visibility="Hidden"/>
我在 UserControl 后面的代码中所做的是如下访问Username
和Password
通过Property Getter Setter
如下的值。
string username = Login.GetInstance().UserName;
string password = Login.GetInstance().Password;
在调试obj.UserName;
属性上返回 Null。为什么它返回 null,我应该如何解决这个问题?
解决方案
问题是您在Login()
获取属性之前创建了一个新实例:
// Code originally in the question
Login obj = new Login();
现在已更改为Login.GetInstance()
,但我们不知道该方法的作用。如果该Login
方法每次都返回对新实例的引用,那么我们就会遇到同样的问题。
该对象中的两个属性都将为空,因为您尚未将它们设置为任何值。(所有引用类型的默认值为 null。)我不清楚您将属性设置为任何其他值的位置,但无论您设置它们的对象与您当时使用的对象不同在您向我们展示的最后一段代码中。
您需要确保可以在称为“setter”的同一对象上使用“getter”。
顺便说一句,由于您的属性很简单(它们只是获取和设置变量,没有其他行为,例如验证),您可以将所有第一段代码替换为自动实现的属性:
public string UserName { get; set; }
public string Password { get; set; }
推荐阅读
- electron - Electron ES6 模块导入
- android - 尝试发送消息以测试 FCM 是否有效但应用程序崩溃
- android - 如果从链接区域开始拖动,LinkMovementMethod 不会滚动
- python - 如何为 WxPython STC 创建自定义 Lexer
- java - 如何在其他活动中使用最终变量?
- angular - 角度绑定无法正常工作
- python - 在 Windows 10 上的 python 进程中导入 tensorflow 需要 1.5GB 的 RAM
- android - 如何将领域对象从后台线程传递给 UiThread?
- java - spring boot thymeleaf 多选数据绑定 mongodb
- react-native - react-native expo 问题:`SceneView` 的检查方法