development

{get;

big-blog 2020. 2. 10. 22:17
반응형

{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 번호.


공용 속성 이름에 대한 접근 자입니다.

장르의 인스턴스에서 해당 속성의 값을 가져 오거나 설정하는 데 사용할 수 있습니다.


이것이 자동 구현 속성입니다. 기본적으로 C #에서 클래스에 대한 개인 변수를 정의하지 않고 클래스의 속성을 만드는 간단한 방법입니다. 변수 값을 가져 오거나 설정할 때 추가 로직이 필요하지 않을 때 일반적으로 사용됩니다.

MSDN의 Auto-Implemented Properties Programming Guide 에서 더 많은 내용을 읽을 수 있습니다 .


즉, 장르 유형의 변수를 만들면 변수로 속성에 액세스 할 수 있습니다.

Genre oG = new Genre();
oG.Name = "Test";

  • get / set 패턴은 인스턴스화 된 클래스의 속성 인스턴스의 설정 ( 'set') 또는 검색 ( 'get') 중에 로직을 추가 할 수있는 구조를 제공합니다. 이는 인스턴스화 로직이 필요한 경우 유용 할 수 있습니다. 특성.

  • 속성은 'get'접근자를 가질 수 있으며,이 속성은 해당 속성을 읽기 전용으로 만들기 위해 수행됩니다.

  • get / set 패턴을 구현할 때 중간 변수는 값을 배치하고 값을 추출 할 수있는 컨테이너로 사용됩니다. 중간 변수는 일반적으로 밑줄로 시작합니다. 이 중간 변수는 get / set 호출을 통해서만 액세스 할 수 있도록하기 위해 비공개입니다. 그의 답변은 get / set 구현에 가장 일반적으로 사용되는 구문 규칙을 보여 주므로 Brandon의 답변을 참조하십시오.


이러한 { get; set; }구문을 자동 속성, C # 3.0 구문이라고합니다.

컴파일하려면 Visual C # 2008 / csc v3.5 이상을 사용해야합니다. 그러나 .NET Framework 2.0 (이 기능을 지원하는 데 런타임 또는 클래스가 필요하지 않음)만큼 낮은 대상을 지정하는 출력을 컴파일 할 수 있습니다.


Visual Studio X에서 클래스에 속성을 정의 하고이 클래스를 형식으로 만 사용하려는 경우 프로젝트를 빌드 한 후 "필드 X는 할당되지 않으며 항상 기본값이 있음" 이라는 경고가 표시 됩니다. value " 입니다.

{ get; set; }X속성 을 추가 하면이 경고가 표시되지 않습니다.

또한 Visual Studio 2013 및 상위 버전에서 추가 { get; set; }하면 해당 속성에 대한 모든 참조를 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오


기본적으로 속기입니다. public string Name { get; set; }많은 예제에서와 같이 작성할 수 있지만 작성할 수도 있습니다.

private string _name;

public string Name
{
    get { return _name; }
    set { _name = value ; } // value is a special keyword here
}

왜 사용됩니까? 속성에 대한 액세스를 필터링하는 데 사용할 수 있습니다 (예 : 이름에 숫자를 포함하지 않기를 원함).

예를 들어 보겠습니다.

private class Person {
    private int _age;  // Person._age = 25; will throw an error
    public int Age{
        get { return _age; }  // example: Console.WriteLine(Person.Age);
        set { 
            if ( value >= 0) {
                _age = value; }  // valid example: Person.Age = 25;
        }
    }
}

공식적으로 그것의 자동 구현 속성과 ( 프로그래밍 안내서 ) 를 읽는 좋은 습관 . 튜토리얼 비디오 C # Properties : "get"및 "set"을 사용하는 이유 도 추천 합니다.


설정은 속성에 대한 액세스 수정 자입니다. Get은 속성 필드를 읽습니다. 설정 속성 값을 설정합니다. Get은 읽기 전용 액세스와 같습니다. 설정은 쓰기 전용 액세스와 같습니다. 이 속성을 읽기 쓰기로 사용하려면 get 및 set을 모두 사용해야합니다.


속성이 오른쪽 (RHS)에 나타날 때 Get이 호출됩니다. 속성이 '='기호의 왼쪽 (LHS)에 나타날 때 호출됩니다.

자동 구현 된 속성의 경우 배경 필드는 장면 뒤에서 작동하며 보이지 않습니다.

예:

public string Log { get; set; }

자동 구현되지 않은 속성의 경우 백업 필드가 선행되어 개인 범위 변수로 표시됩니다.

예:

private string log;

public string Log
{
    get => log;
    set => log = value;
}

또한 'getter'와 'setter'는 다른 'backing field'를 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/5096926/what-is-the-get-set-syntax-in-c



반응형