자동 구현 속성의 지원 변수에 액세스하려면 어떻게해야합니까?
과거에는 다음과 같은 속성을 선언했습니다.
public class MyClass
{
private int _age;
public int Age
{
get{ return _age; }
set{ _age = value; }
}
}
이제 다음을 수행 할 수 있습니다.
public class MyClass
{
public int Age {get; set;}
}
제 질문은이 표기법을 사용하여 자동으로 생성 된 개인 변수에 어떻게 액세스 할 수 있습니까?
차라리 공개 접근 자 'Age'가 아닌 개인 변수에 액세스하고 싶습니다. 개인 변수에 액세스하는 기본 표기법이 있습니까, 아니면 불가능합니까?
새로운 자동 속성의 목적은 get 또는 set에 특별한 로직이 필요하지 않은 단순한 속성이있을 때 작성해야하는 상용구 코드의 양을 줄이는 것입니다.
이러한 속성이 사용하는 비공개 멤버에 액세스하려는 경우 일반적으로 몇 가지 이유가 있습니다.
- 단순한 get / set 이상이 필요합니다.이 경우이 멤버에 대해 자동 속성을 사용하지 않아야합니다.
- get 또는 set를 통해 성능 저하를 피하고 멤버를 직접 사용하고 싶습니다.이 경우 실제로 성능 저하가 발생하면 놀랄 것입니다. 간단한 get / set 멤버는 인라인하기가 매우 쉬우 며 내 (제한적으로 제한됨) 테스트에서 자동 속성을 사용하는 것과 멤버에 직접 액세스하는 것의 차이를 발견하지 못했습니다.
공용 읽기 액세스 (즉, 'get') 만 갖고 클래스가 멤버에 직접 쓰기를 원합니다.이 경우 자동 속성에서 개인 집합을 사용할 수 있습니다. 즉
public class MyClass { public int Age {get; private set;} }
일반적으로 자동 속성에서 사용하는 지원 필드로 직접 이동하려는 대부분의 이유를 다룹니다.
자동 속성을 사용하면 속성에 대한 가져 오기 / 설정 논리가 필요하지 않으므로 개인 지원 변수가 필요하지 않습니다.
클래스에 복잡한 논리가있는 경우 자동 속성을 사용하지 마십시오. private int _age
평소처럼 일반적인 게터 / 세터로 가십시오 .
IMO, 자동 속성은 다음과 같은 일회용 객체 또는 임시 데이터 캡슐을 빠르게 구현하는 데 더 적합합니다.
public class TempMessage {
public int FromID { get; set; }
public int ToID { get; set; }
public string Message { get; set; }
}
많은 논리가 필요하지 않은 곳.
이 구문은 일반적으로 "syntax sugar"라고 불리며, 이는 컴파일러가 해당 구문을 가져 와서 다른 것으로 변환 함을 의미합니다. 귀하의 예제에서 컴파일러는 다음과 같은 코드를 생성합니다.
[CompilerGenerated]
private int <Age>k_BackingField;
public int Age
{
[CompilerGenerated]
get
{
return this.<Age>k_BackingField;
}
[CompilerGenerated]
set
{
this.<Age>k_BackingField = value;
}
심지어이 모든 것을 알고, 당신은 할 수 아마도 직접 백업 필드하지만 패배 그런 종류의 자동 속성을 사용하는 목적에 액세스 할 수 있습니다. 아마도 C # 컴파일러의 향후 릴리스에서 언제든지 변경 될 수있는 구현 세부 사항에 의존하기 때문에 여기에서 말할 것입니다.
Behind the scenes what happens is the injection of a private member variable, prefixed with <>k__AutomaticallyGeneratedPropertyField#
From C# 3.0 Automatic Properties explained
Although it may be possible to use that private member directly, it's very hacky and unnecessary.
You shouldn't, and it's very unlikely you need to. If you need to access the property, just use the public property (e.g. this.Age). There's nothing special about the private field backing the public property, using it in preference to the property is just superstition.
You can't, it's a language feature as opposed to a IDE feature. To be honest i'd prefer then IDE to add the private variable in for you. I agree that it is slightly weird for the class to internally have to use the public entry point to access its own variables. Hence I don't use this new feature that much myself.
'IT박스' 카테고리의 다른 글
node.js에서 병렬 실행 조정 (0) | 2020.10.10 |
---|---|
PowerShell 탭 완성이 Bash처럼 작동하도록하는 방법 (0) | 2020.10.10 |
기본 HTML-현재 폴더에 대한 상대 경로를 설정하는 방법은 무엇입니까? (0) | 2020.10.10 |
도메인 자격 증명을 확인하는 방법은 무엇입니까? (0) | 2020.10.10 |
Java : 참조로 int를 전달하는 가장 좋은 방법 (0) | 2020.10.10 |