C # 자동 속성 초기화
이 질문에는 이미 답변이 있습니다.
- C # 자동 속성에 기본값을 어떻게 지정합니까? 답변 21 개
나는 다음과 같은 클래스를 작성하는 데 익숙합니다.
public class foo {
private string mBar = "bar";
public string Bar {
get { return mBar; }
set { mBar = value; }
}
//... other methods, no constructor ...
}
Bar를 자동 속성으로 변환하는 것이 편리하고 간결 해 보이지만 생성자를 추가하고 거기에 초기화를 넣지 않고 초기화를 유지하는 방법은 무엇입니까?
public class foo2theRevengeOfFoo {
//private string mBar = "bar";
public string Bar { get; set; }
//... other methods, no constructor ...
//behavior has changed.
}
생성자를 추가하는 것이 자동 속성에서 얻는 노력 절감과 인라인이 아님을 알 수 있습니다.
이와 같은 것이 나에게 더 의미가 있습니다.
public string Bar { get; set; } = "bar";
업데이트-아래 답변은 C # 6이 나오기 전에 작성되었습니다. C # 6에서는 다음과 같이 작성할 수 있습니다.
public class Foo
{
public string Bar { get; set; } = "bar";
}
당신은 할 수 있습니다 또한 생성자에서만 쓸 수 있습니다 (하지만 기본 초기 값을 부여 할 수 있습니다 읽기 전용 자동으로 구현 된 속성을 쓰기 :
public class Foo
{
public string Bar { get; }
public Foo(string bar)
{
Bar = bar;
}
}
안타깝게도 지금이 작업을 수행 할 방법이 없습니다. 생성자에서 값을 설정해야합니다. 생성자 체인을 사용하면 중복을 피할 수 있습니다.
자동으로 구현 된 속성은 지금은 편리하지만 확실히 더 나을 수 있습니다. 생성자에서만 설정할 수 있고 읽기 전용 필드로 뒷받침되는 읽기 전용 자동 구현 속성만큼 자주 이러한 종류의 초기화를 원하지 않습니다.
이렇게하지 때까지 C # 5를 포함한 일어난하지만, C # 6 계획되고있다 - 선언의 시점에서 초기화를 허용 측면에서 모두 와 읽기 전용 자동으로 구현 된 속성을 허용하는 것은 생성자 본문에 초기화 할 수 있습니다.
클래스 생성자를 통해 할 수 있습니다.
public class foo {
public foo(){
Bar = "bar";
}
public string Bar {get;set;}
}
다른 생성자 (즉, 매개 변수를 취하는 생성자) 또는 많은 생성자가있는 경우 항상 이것을 가질 수 있습니다 (생성자 체인이라고 함).
public class foo {
private foo(){
Bar = "bar";
Baz = "baz";
}
public foo(int something) : this(){
//do specialized initialization here
Baz = string.Format("{0}Baz", something);
}
public string Bar {get; set;}
public string Baz {get; set;}
}
항상 기본 생성자에 대한 호출을 연결하면 모든 기본 속성 초기화를 설정할 수 있습니다. 체인을 연결할 때 체인 생성자가 호출 생성자보다 먼저 호출되므로보다 전문화 된 생성자가 다른 기본값을 적용 할 수 있습니다.
C # 6.0에서 가능합니다.
public int Y { get; } = 2;
기본 생성자 및 물론 기본이 아닌 생성자에서 :
public foo() {
Bar = "bar";
}
어쨌든 뒤에서 일어나는 일이기 때문에 이것은 내가 믿는 원래 코드보다 성능이 떨어집니다.
참고 URL : https://stackoverflow.com/questions/169220/initializing-c-sharp-auto-properties
'Programing' 카테고리의 다른 글
grep에서 이진 파일 일치 결과를 억제하는 방법 (0) | 2020.05.19 |
---|---|
GitHub 리포지토리의 포크 종속성 삭제 (0) | 2020.05.19 |
다른 ORDER BY로 PostgreSQL DISTINCT ON (0) | 2020.05.19 |
명령 줄에서 .NET Core 콘솔 앱을 실행하는 방법 (0) | 2020.05.19 |
React Native를 사용할 때 데이터를 저장하는 옵션은 무엇입니까? (0) | 2020.05.19 |