2016-07-02 2 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는 내가 생각하기 때문에 두 번째 방법으로 작업 할 때, 설정 속성에 value은 어쩌면 에 던져진 모든 것을 나타내며 실제 값을 부여합니다. 이 초기화됩니다 다음

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

: 당신이 좋아 다음 초기화 할 수 있습니다 C# 6을 사용하는 경우, 당신은뿐만 아니라

get { return "njabulo"; } 

을 할 수있는 리터럴 값에 Set 할 이유가 없습니다

+1

두 번째 방법 : 누군가가 Password = "... something ..."을 호출하면 "set"이 호출되고 암호는 이제 "njabulo"입니다. 그 전에는 암호가 null입니다. –

+0

나는 두 개의 문자열 매개 변수 인 id와 pass를받는 메소드를 가졌습니다. 이제는 메소드에서 전달한 변수를 속성에서 비교해보고 싶었습니다 ... 그것은 작동하지 않았고 username과 password라고 말합니다 있습니다 null – 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

, 나중에 설정하면 항상 그 값을 유지하지는 않습니다.

2

getter 또는 setter를 사용하여 속성을 정의하면 getter 또는 setter 코드가 이러한 동작 중 하나가 발생할 때만 실행된다는 것을 의미합니다.

두 번째 예제에서는 아직 setter를 호출하지 않았습니다. setter에 내용 값을 지정해야 할 이유가 없습니다. 당신이 다음

1.Defined 백 엔드 필드 속성을했을 bcoz

첫 번째 예는 괜찮습니다. 2. 초기화 된 백엔드 필드

하지만 두 번째 초기화에서는 초기화하지 않았습니다.

0

set의 목적은 다음과 같이 해당 속성의 값을 설정 허용하는 것입니다 :

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

당신은 일반적으로이 같은 속성을 작성합니다

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

그런 식으로 누군가가

x.Username = "newusername"; 

다음 set 메서드를 호출 할 때 호출하는 경우는, value는 "newusername"입니다; 그게 당신이 수업에 속성을 설정할 수있는 방법입니다. 변수 value을 선언 할 필요가 없습니다. 이는 set에 전화 할 때 사용되는 값을 자동으로 나타냅니다.

당신이 할 경우이 :

set { username = "12345"; } 

그런 다음 당신이 설정하려고 어떤 값을 중요하지 않습니다. 당신은

x.Username = "99999" 

또는 다른 값을 호출 할 수 있지만 항상 username에 "12345"로 설정하는 것입니다.

일반적으로 "초기화"라고 할 때 클래스를 처음 만들 때 설정되는 값을 의미합니다. 같은 일을하는 새로운, 더 편리한 구문입니다

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 정확히 내가 뭘 원했어, 고마워 – yanguya995

관련 문제