=================================
=================================
=================================
출처: https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/get
get
키워드는 속성 값 또는 인덱서 요소를 반환하는 속성 또는 인덱서의 accessor 메서드를 정의합니다. 자세한 내용은 속성, 자동으로 구현된 속성 및 인덱서를 참조하세요.
다음 예제에서는 Seconds
라는 속성의 get
및 set
접근자를 둘 다 정의합니다. _seconds
라는 private 필드를 사용하여 속성 값을 지원합니다.
class TimePeriod { private double _seconds; public double Seconds { get { return _seconds; } set { _seconds = value; } } }
대체로 get
접근자는 앞의 예제와 마찬가지로 값을 반환하는 단일 문으로 구성됩니다. C# 7.0부터 get
접근자를 식 본문 멤버로 구현할 수 있습니다. 다음 예제에서는 get
및 set
접근자 둘 다를 식 본문 멤버로 구현합니다.
class TimePeriod { private double _seconds; public double Seconds { get => _seconds; set => _seconds = value; } }
속성의 get
및 set
접근자가 private 지원 필드의 값 설정 또는 검색 이외의 다른 작업을 수행하지 않는 간단한 사례의 경우 자동 구현 속성에 대한 C# 컴파일러의 지원을 활용할 수 있습니다. 다음 예제에서는 Hours
를 자동 구현 속성으로 구현합니다.
class TimePeriod2 { public double Hours { get; set; } }
=================================
=================================
=================================
출처: https://mrw0119.tistory.com/15
1. C++의 Set(), Get()
C++로 클래스를 만들면 보통 데이터의 은닉성을 위해
변수를 Private이나 Protected로 선언하고,
Set()과 Get() 함수로 변수를 읽고 쓰고 한다.
문제는.. 클래스의 변수가 많아질수록 Set(), Get() 함수로
도배되어져서 가독성도 떨어지고,
변수를 더 추가할 때마다 매번 Set(), Get() 함수를 작성해주어야하는 불편함이 있다.
은닉성은 지킬 수 있다지만, 상당히 번거롭고 귀찮은 작업이다.
2. C#의 프로퍼티
C#에서는 이를 단순화하는 프로퍼티(Property)라는 변수를 제공한다.
C++의 클래스를 C#의 프로퍼티로 작성하면 다음과 같다.
( value라는 변수는 미리 예약된 변수로 멤버변수에 대입하는 값이 자동으로 들어간다. )
C++에서 사용하던 set(), get() 함수를 뭐 나름 단순화시키긴 했다지만..
뭐 그닥.. 다른건 없는것 같다.;;;
그래서인지 C# 3.0부터는 이를 더 단순화할 수 있는 자동구현(?) 프로퍼티를 제공한다.
3. 자동구현 프로퍼티
변수에 set; get; 만 넣어주면 알아서 set(), get() 함수를 자동 구현해준다.
그래서 자동구현 프로퍼티!
게다가 set을 빼고 get만 넣어주면 아주 쉽게
멤버변수를 읽기전용으로도 사용할수 있다.
4. 프로퍼티 변수 초기화
이뿐 아니라 객체 생성시에 손쉽게 프로퍼티 변수를 초기화할 수 있다는 편리함까지 제공한다.
클래스내에 프로퍼티 변수가 선언되어 있다면
생성자를 작성하지 않아도 객체 생성시에 초기화가 가능하며,
또한 원하는 프로퍼티만 골라서 초기화를 해줄 수 있다. 다음 예제를 참고하자.
이정도면 보기에도 심플하고, 사용하는데도 상당히 편리하다.
참으로 훌륭하지 아니한가?ㅎ
※인터페이스나 추상클래스를 상속받는 클래스를 정의하는 경우,
인터페이스나 추상클래스 내의프로퍼티는 메소드와 같이 반드시 정의해주어야 한다.
출처: https://mrw0119.tistory.com/15 [Game Developer W]
=================================
=================================
=================================
출처: https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/how-to-declare-and-use-read-write-properties
속성은 개체 데이터에 대한 액세스가 보호, 제어, 확인되지 않을 위험 없이 공용 데이터 멤버의 편리함을 제공합니다. 이를 위해 기본 데이터 멤버의 값을 할당하고 검색하는 특수 메서드인 접근자가 사용됩니다. set접근자를 통해 데이터 멤버를 할당할 수 있으며, get 접근자는 데이터 멤버 값을 검색합니다.
이 샘플에서는 Name
(string) 및 Age
(int)의 두 속성이 있는 Person
클래스를 보여 줍니다. 두 속성 모두 get
및 set
접근자를 제공하므로 읽기/쓰기 속성으로 간주됩니다.
예제
class Person { private string name = "N/A"; private int age = 0; // Declare a Name property of type string: public string Name { get { return name; } set { name = value; } } // Declare an Age property of type int: public int Age { get { return age; } set { age = value; } } public override string ToString() { return "Name = " + Name + ", Age = " + Age; } } class TestPerson { static void Main() { // Create a new Person object: Person person = new Person(); // Print out the name and the age associated with the person: Console.WriteLine("Person details - {0}", person); // Set some values on the person object: person.Name = "Joe"; person.Age = 99; Console.WriteLine("Person details - {0}", person); // Increment the Age property: person.Age += 1; Console.WriteLine("Person details - {0}", person); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } /* Output: Person details - Name = N/A, Age = 0 Person details - Name = Joe, Age = 99 Person details - Name = Joe, Age = 100 */
강력한 프로그래밍
이전 예제에서 Name
및 Age
속성은 public이며, get
및 set
접근자를 모두 포함합니다. 이 경우 모든 개체가 이러한 속성을 읽고 쓸 수 있습니다. 그러나 때로는 접근자 중 하나를 제외하는 것이 좋습니다. 예를 들어 set
접근자를 생략하면 속성은 읽기 전용이 됩니다.
public string Name { get { return name; } }
또는 하나의 접근자를 공개적으로 노출하고 다른 접근자를 private 또는 protected로 설정할 수 있습니다.자세한 내용은 비대칭 접근자 접근성을 참조하세요.
속성이 선언되면 클래스의 필드처럼 사용할 수 있습니다. 이 경우 다음 문과 같이 속성의 값을 가져오고 설정할 때 자연스러운 구문을 사용할 수 있습니다.
person.Name = "Joe"; person.Age = 99;
속성 set
메서드에 특수 value
변수를 사용할 수 있습니다. 이 변수에는 사용자가 지정한 값이 포함됩니다. 예를 들면 다음과 같습니다.
name = value;
Person
개체의 Age
속성을 증가하기 위한 정리된 구문은 다음과 같습니다.
person.Age += 1;
개별 set
및 get
메서드를 사용하여 속성을 모델링한 경우 동등한 코드가 다음과 같이 표시될 수 있습니다.
person.SetAge(person.GetAge() + 1);
다음 예제에서는 ToString
메서드가 재정의되었습니다.
public override string ToString() { return "Name = " + Name + ", Age = " + Age; }
ToString
이 프로그램에서 명시적으로 사용되지 않고 기본적으로 WriteLine
호출에 의해 호출됩니다.
=================================
=================================
=================================
'프로그래밍 관련 > 언어들의 코딩들 C++ JAVA C# 등..' 카테고리의 다른 글
[C#] Sizeof, Marshal.SizeOf Method 형 크기 SizeOf 관련 (0) | 2019.03.13 |
---|---|
[C#] C++ 와 C# 형 비교 참조 Converting C++ Data Types to C# (0) | 2019.03.13 |
[MFC] 다이얼로그를 전체화면, 최대화, 최소화, 원래대로 만들기 관련 (1) | 2017.09.14 |
C, C++ 시간 계산 관련 (0) | 2017.09.11 |
C/C++ 스레드 concurrent_vector, concurrent_queue, parallel_for, parallel_for_each 등등 관련 (0) | 2017.07.11 |
댓글 영역