{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";
우리는 구체적으로 set
Name 속성 의 함수를 사용합니다
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
'development' 카테고리의 다른 글
C #에서 Java의 final과 동등한 것은 무엇입니까? (0) | 2020.02.10 |
---|---|
jQuery에서 PUT / DELETE 요청을 보내는 방법은 무엇입니까? (0) | 2020.02.10 |
Twitter 부트 스트랩 모달 창이 닫히지 못하게하십시오. (0) | 2020.02.10 |
인터넷에서 소프트웨어가 깨진 다운로드로 발견되었습니다. 어떻게해야합니까? (0) | 2020.02.10 |
Java에서 목록을 반복하는 방법 (0) | 2020.02.10 |