2013-07-11 1 views
1

C#의 자동 속성을 통해 비공개 필드를 캡슐화 할 수 있습니까? C# 속성을 사용할 때 반드시 개인 필드를 캡슐화 할 수 있습니다.C# 개인 필드를 래핑하는 자동 속성?

private string owner; 
public string Owner 
{ 
    get { return owner; } 
    set { owner=value;} 
} 

내가 자동 속성을 사용할 때 어떻게됩니까?

public string Owner { get; set; } 

난 단지 재산 자체와 상호 작용하는 방법, 맞죠? 자동 속성을 사용하여 비공개 필드를 캡슐화하는 방법이 있습니까? 어떻게 작동합니까?

+0

목표는 무엇입니까? –

+0

입력을 줄이려면 private 필드를 만들고 'ctrl + r'과 'ctrl + e'를 누르십시오. –

답변

1

자동 속성을 사용하여 비공개 필드를 캡슐화하는 방법이 있습니까?

예; 즉 정확히 자동으로 구현 된 속성 입니다. 간단히 말해 컴파일러이 필드를 선언합니다. 필드를 직접 볼 수는 없습니다. 아마도 여기에있는 실제 질문은 다음과 같아야합니다.

자동으로 구현되는 속성을 사용하는 경우 기본 필드에 직접 액세스 할 수 있습니까?

그 대답은 다음과 같습니다. 아니오; 대신 속성에 액세스하십시오. JIT 인라이닝을 수행 한 후에는 이라는 어쨌든의 차이를 알 수 없습니다.

값은 다음과 같이 노출 여부 개체에 따라 외부에 제공되는 방식에 차이가
+0

멤버가 구조체 유형이거나 코드를 'ref'매개 변수로 전달해야하는 경우 차이가있을 수 있습니다. – supercat

0

아니요 당신이 요구하는대로 할 방법이 있습니다.

자동 속성은 필드를 정의하지만 숨김이며 컴파일 타임에 만들어집니다.

문제는 입력이고 당신은 비주얼 스튜디오를 사용하는 경우 :

단지 편집기 propfull 내부에 입력하고 TAB에 더블 탭을, 비주얼 스튜디오 자동으로 속성과 필드 encapsulatd을 만듭니다 그 안에 당신이 지정한 이름이 들어 있습니다.

0

개인 필드는 고유 한 이름으로 컴파일 할 때 만들어지며 뒤에서 사용됩니다. 자동 등록 정보가 구현되어 입력기에서 유효성 검증을 추가하는 경우 유형 인터페이스가 변경되지 않습니다. 그런 다음 수업에서 공개 속성을 참조해야합니다. 그런 식으로 세터에 유효성 검사를 추가하면 클래스에 유효성 검사 프로세스가 통과되면 특별한 권한이 부여되지 않습니다.

0

C#의 기본 속성이 공용 getter 및 setter가있는 개인 필드로 컴파일됩니다.

public string Name{get;set;} 

이로 컴파일이 :

private string name 
public string Name 
{ 
    get 
    { 
     return name; 
    } 
    set 
    { 
     name = value; 
    } 
} 

(이 나던 실제로 변수 이름은 다른과는 접근/뮤 테이터를 사용하지만, 본질적으로는 같은 것입니다)

0

:

public string Owner { get; set; } 
속성이

또는

public string Owner; 

어느 필드입니다.

개인 변수가있는 경우 필드 또는 클래스의 속성 인 경우 자동 등록 정보가 필요하지 않습니다. 당신이 준 코드의 두 조각이 동일하지만 아무것도

private string myPrivateValue; 

    public string myPrivateValueAsProperty { 
     get { return myPrivateValue; } 
     set { myPrivateValue = value; } 
    } 
0

하고 귀하의 경우와 동일한 효과를 갖게됩니다 나중에 외부에 노출 할 경우 당신은 다음과 같은 코드가없는 시작할 때, 그건. 그러나 로컬 개인 속성을 사용하거나 기본 필드를 사용하여 속성을 호출하여 기본 값을 제공 할 수 있습니다.

private string owner = "I am the Owner"; 
public string Owner 
{ 
    get { return owner; } 
    set { owner=value;} 
} 

또한 내부에서 유효성 검사를 수행하려는 경우 백킹 필드가 사용됩니다.

private string owner = "I am the Owner"; 
public string Owner 
{ 
    get { return owner; } 
    set 
    { 
     if(!string.IsNullOrEmpty(value)) 
       owner=value; 
    } 
} 

때때로 속성을 알리는 데에도 사용됩니다.

private string owner = "I am the Owner"; 
public string Owner 
{ 
    get { return owner; } 
    set 
    { 
     owner=value; 
     NotifyPropertyChanges("Owner"); 
    } 
} 

희망이 있습니다.