[C#] {get; 세트; } C #의 구문?

ASP.NET MVC를 배우고 있으며 영어 문서를 읽을 수 있지만이 코드에서 무슨 일이 일어나고 있는지 이해하지 못합니다.

public class Genre
{
    public string Name { get; set; }
}

이것은 무엇을 의미 { get; set; }합니까?



답변

소위 자동 속성이며 본질적으로 다음과 같은 약어입니다 (컴파일러에서 유사한 코드가 생성됨).

private string name;
public string Name
{
    get
    {
        return this.name;
    }
    set
    {
        this.name = value;
    }
}


답변

{ get; set; }다시피 @Klaus와 @Brandon이 말한 것처럼 “자동 속성”은 “백킹 필드”가있는 속성을 작성하는 데 사용되는 약어입니다. 따라서이 경우 :

public class Genre
{
    private string name; // This is the backing field
    public string Name   // This is your property
    {
        get => name;
        set => name = value;
    }
}

그러나 한 시간 정도 전에 나와 같은 사람이라면 속성접근 자가 무엇인지 실제로 이해 하지 못하며 기본 용어를 가장 잘 이해하지 못합니다. MSDN은 이와 같은 학습을위한 훌륭한 도구이지만 초보자에게는 항상 이해하기 쉽지 않습니다. 그래서 여기서 더 깊이 설명하려고합니다.

get하고 set있는 접근은 에서 데이터에 액세스하고 정보를 그들에게있는 거 수를 의미하는 개인 (보통의 필드 백업 필드 ) 보통에서 그렇게 대중 특성 (위의 예에서 볼 수 있듯이).

위의 진술이 매우 혼란 스럽다는 것을 부인할 수는 없습니다. 이 코드가 음악 장르를 의미한다고 가정 해 봅시다. 그래서 장르 수업 내에서 우리는 다른 장르의 음악을 원할 것입니다. 힙합, 록 및 컨트리의 3 가지 장르를 원한다고 가정 해 봅시다. 이를 위해 클래스 이름을 사용하여 해당 클래스의 새 인스턴스 를 만듭니다 .

Genre g1 = new Genre(); //Here we're creating a new instance of the class "Genre"
                        //called g1. We'll create as many as we need (3)
Genre g2 = new Genre();
Genre g3 = new Genre();

//Note the () following new Genre. I believe that's essential since we're creating a
//new instance of a class (Like I said, I'm a beginner so I can't tell you exactly why
//it's there but I do know it's essential)

Genre 클래스의 인스턴스를 만들었으므로 위에서 설정 한 ‘Name’ 속성 을 사용하여 장르 이름을 설정할 수 있습니다 .

public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now 

다음을 작성하여 ‘g1’이라는 이름을 힙합으로 설정할 수 있습니다

g1.Name = "Hip Hop";

여기서 일어나는 일은 복잡한 것입니다. 마찬가지로 내가 전에 말했듯이, get그리고 set당신이 그렇지 않으면 액세스 할 수 없습니다 것을 민간 분야의 정보에 액세스. 개인 필드 get에서만 정보를 읽고 반환 할 수 있습니다. 해당 개인 필드 set에만 정보를 수 있습니다 . 그러나 모두 속성을함으로써 get그리고 set우리가 할 수있어 이러한 기능을 모두 수행합니다. 그리고 g1.Name = "Hip Hop";우리는 구체적으로 setName 속성 의 함수를 사용합니다

set라는 암시 적 변수를 사용합니다 value. 기본적으로 이것이 의미하는 것은 안에 “value”가 표시 될 때마다 set변수를 참조하는 것입니다. “value”변수 우리가 쓸 때이 경우 변수 를 전달 g1.Name =하기 =위해를 사용하고 있습니다. 따라서 본질적으로 다음과 같이 생각할 수 있습니다.value"Hip Hop"

public class g1 //We've created an instance of the Genre Class called "g1"
{
    private string name;
    public string Name
    {
        get => name;
        set => name = "Hip Hop"; //instead of 'value', "Hip Hop" is written because 
                              //'value' in 'g1' was set to "Hip Hop" by previously
                              //writing 'g1.Name = "Hip Hop"'
    }
}

위의 예제는 실제로 코드로 작성되지 않았습니다. 백그라운드에서 진행되는 작업을 나타내는 가상의 코드에 가깝습니다.

이제 장르 의 g1 인스턴스 이름을 설정 했으므로 다음 을 작성하여 이름을 얻을 수 있다고 생각합니다.

console.WriteLine (g1.Name); //This uses the 'get' function from our 'Name' Property 
                             //and returns the field 'name' which we just set to
                             //"Hip Hop"

우리가 이것을 실행하면 "Hip Hop"콘솔에 들어갑니다.

이 설명의 목적을 위해 출력으로 예제를 완성하겠습니다.

using System;
public class Genre
{
    public string Name { get; set; }
}

public class MainClass
{
    public static void Main()
    {
        Genre g1 = new Genre();
        Genre g2 = new Genre();
        Genre g3 = new Genre();

        g1.Name = "Hip Hop";
        g2.Name = "Rock";
        g3.Name = "Country";

        Console.WriteLine ("Genres: {0}, {1}, {2}", g1.Name, g2.Name, g3.Name);
    }
}

산출:

"Genres: Hip Hop, Rock, Country"


답변

그것들은 자동 속성입니다

기본적으로 지원 필드가있는 속성을 작성하는 다른 방법입니다.

public class Genre
{
    private string _name;

    public string Name
    {
      get => _name;
      set => _name = value;
    }
}


답변

이것은 이것을하는 짧은 방법입니다.

public class Genre
{
    private string _name;

    public string Name
    {
      get => _name;
      set => _name = value;
    }
}


답변

비공개 데이터 멤버를 명시 적으로 만들 필요가 없도록 데이터 멤버를 공개로 표시하는 바로 가기입니다. C #은 개인 데이터 멤버를 생성합니다.

이 바로 가기를 사용하지 않고 데이터 멤버를 공개 할 수 있지만 데이터 멤버의 구현을 변경하여 일부 논리를 갖기로 결정한 경우 인터페이스를 중단해야합니다. 간단히 말해보다 유연한 코드를 만드는 바로 가기입니다.


답변

기본적으로 다음과 같은 바로 가기입니다.

class Genre{
    private string genre;
    public string getGenre() {
        return this.genre;
    }
    public void setGenre(string theGenre) {
        this.genre = theGenre;
    }
}
//In Main method
genre g1 = new Genre();
g1.setGenre("Female");
g1.getGenre(); //Female


답변

자동 구현 재산 C 번호.