2016-07-02 10 views
0

私のフィールドの上にあるようなコードを書くと、正しく初期化されます。 アプリケーションは正常に動作します。プロパティの取得と設定

private string username; 
    private string password; 

    public string Password 
    { 
     get { return password; } 
     set { password = value; } 
    } 

    public string Username 
    { 
     get { return username; } 
     set { username = value; } 
    } 

    public Authenticate() 
    { 
     this.username = "njabulo"; 
     this.password = "12345"; 
    } 

はなく、このようにそれを書き込む前に、私は次の方法でコードを書いていたし、それが didntの仕事、フィールドが、私はまさにそれをない作るかを知りたい

private string username; 
private string password; 

public string Password 
    { 
     get { return password; } 
     set { password = "njabulo"; } 
    } 

    public string Username 
    { 
     get { return username; } 
     set { username = "12345"; } 
    } 

を初期化しますdidntは私は思うから2番目の方法に取り組むには、 valueは、プロパティの に投げられたものを表し、実際の値を与えています。リテラル値に Setする理由はありません

+1

第二の方法:「...何か...」=誰かがパスワードを呼び出す場合は、今と呼ばれる 『設定』、およびパスワードは 『ジャブロ』です。その前に、パスワードはnullです。 –

+0

私は2つの文字列パラメータ、idとpassを受け取ったメソッドを持っていました...メソッドで渡された変数とプロパティで初期化された変数を比較したいと思っています。ヌルです – yanguya995

+0

最初の方法で初期化してください。あなたは "セット"でそれを比較することができるよりも。 –

答えて

0

正しい初期化が最初の方法です。自動プロパティを使用して短くします。

public class Authenticate 
{ 
    private string _password; 
    private string _username; 

    public Authenticate() 
    { 
    _password = "mypassword"; 
    _username = "myusername"; 
    } 

    public string Password 
    { 
    get { return _password; } 
    set 
    { 
     if (_password != value) // Compare it here 
     _password = value; 
    } 
    } 

    public string Username 
    { 
    get { return _username; } 
    set 
    { 
     if (_username != value) // Compare it here 
     _username = value; 
    } 
    } 
} 
:あなたはこのようにそれを使用することができ、

public string Password { get; set; } 
public string Username { get; set; } 
public Authenticate() 
{ 
    Username = "njabulo"; 
    Password = "12345"; 
} 

私は理由は上記のコメントの多くを追加しますが(コンペア値):第二の方法は、誰も前に、あなたのパスワードやユーザー名がまだnullの場合、「設定」を呼び出します

+0

回答者のおかげで、彼らは働いている..私は今理解して、 – yanguya995

5

、あなたにも

get { return "njabulo"; } 

を行うことができますが、C#6を使用している場合、あなたは次のように初期化することができます。そして、それが初期化されます

public string Password {get; set;} = "njabulo"; 

後で設定する場合は、常にその値を維持するとは限りません。

2

getterまたはsetterを使用してプロパティを定義すると、getterまたはsetterのコードがこれらのアクションのいずれかが発生したときにのみ実行されることを意味します。

あなたはまだセッターを呼び出していません。セッターにコンテンツ値を指定する理由はありません。あなたは以下の

1.Definedバックエンドフィールドを持つプロパティを行っているbcoz

最初の例では、罰金です。 2.初期化されたバックエンドフィールド

しかし、第2のものでは初期化を行っていません。

0

setの目的は、このように、そのプロパティの値を設定できるようにすることです:

var x = new WhateverYourClassIsNamed(); 
x.Username = "ABC"; 

あなたは、通常、このような性質を記述します。

誰かが

x.Username = "newusername"; 

を呼び出す場合setメソッドが呼び出されたときに、valueは "newusername" である方法

public string Username 
{ 
    get { return username; } 
    set { username = value; } 
} 

。それがあなたのクラスにプロパティを設定する方法です。変数valueを宣言する必要はありません。これは、setを呼び出すときに使用される値を自動的に参照します。

あなたがこれを行う場合:

set { username = "12345"; } 

を次に、あなたが設定しようとするどのような値は重要ではありません。あなたは

x.Username = "99999" 

または他の値を呼び出すことができますが、常に「12345」にusernameを設定するために起こっています。

通常、「初期化」とは、クラスが最初に作成されたときに設定される値を意味します。 、同じことを行い、より新しい、より便利な構文です

public string Password {get; set;} = "12345"; 

private string username; 
private string password = "12345"; //This set whenever you create 
            //a new instance of the class 
public string Password 
{ 
    get { return password; } 
    set { password = value; } 
} 

public string Username 
{ 
    get { return username; } 
    set { username = value; } 
} 

をかCrowcoderが示唆したように実行します。それはあなたが考えていたものだ場合は、これを行うことができます。

+0

Owwww thatsまさに私がやりたかったこと、ありがとう – yanguya995

関連する問題