簡體   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