繁体   English   中英

通过C#Getter Setter属性获取值返回Null

[英]Getting Value Through C# Getter Setter Property Returns 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。 现在,我在MainWindow中单击按钮时访问了另一个Usercontrol ,如下所示。

<vm:ViewUsers x:Name="ViewAllUsers" Visibility="Hidden"/>

我在UserControl后面的代码中所做的如下操作,如下所示通过Property Getter Setter访问UsernamePassword的值。

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,因为您尚未将它们设置为任何值。 (所有引用类型的默认值为null。)对我来说,不清楚将属性设置为其他任何值的位置,但是将其设置为哪个对象与随后使用的对象都不相同在最后的代码中,您向我们展示了。

您需要确保可以在调用“ setters”的对象上使用“ getters”。

顺便说一句,因为您的属性是微不足道的(它们只是获取和设置变量,而没有其他行为,例如验证),所以您可以使用自动实现的属性替换您拥有的所有第一段代码:

public string UserName { get; set; }
public string Password { get; set; }

我认为您误会了吸气剂和吸气剂的工作原理。

在初始化对象时,所有未初始化的字段均设置为默认值(对于引用类型,为null ;对于数字,为0等)。

顾名思义,getter和setter用于设置值和获取。

在做什么,初始化之后,您将使用私有字段为相应的设置器提供值。 但是它所做的是将提供给它的值分配给底层字段。

由于您使用的是相同的私有字段,因此您永远不会对其进行初始化,因为它为null (如我所提到的),因此您尝试通过setter设置其值,但是传递的内容为null ,因此最终将null为好。

C#提供了称为属性的内容,因此您不需要私有字段。 除非您要为getter和setter开发一些其他逻辑。

正如其他用户所述,您正在创建一个新的Login实例,该实例将字段自动初始化为默认值(对于引用类型,为null;对于数字,为0)。

另外,您可以查看删除Login类的默认构造函数,并将其作为构造函数:

public Login(string username, string password)
{
    Username = username;
    Password = password;
}

这样,您就可以执行Login login = new Login("admin", "admin")

如果您只希望拥有一个Login类实例,则也可以查看Singleton模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM