2014-12-04 2 views
1

나는 속성에 대해 이미 많이 읽었으며 나는 그것에 대해 많이 알고있다."속성"은 실제로 무엇입니까?

그러나 내가 이해할 수없는 한 가지는 : "그들은 실제로 무엇입니까?".

이것이 상속 또는 인터페이스 구현 또는 다른 OOP 이해 가능한 개념이 아니라면 어떤 개념입니까?

클래스 또는 클래스 멤버를 사용하고 속성을 지정할 때 장면 뒤에서 어떤 일이 발생합니까?

이 사이트의 다른 관련 게시물을 읽었습니다. 그러나 그들은 실제로 일어나는 것에 관해 많은 정보를주지 않습니다. 그것들은 속성의 사용에 관한 것입니다. 그리고 그들이 실제로 존재하는 것에 대한 이해할 수없는 설명입니다. 다른 게시물에서 이것은 "메타 데이터, 객체/메소드/속성에 관한 데이터"라고 선언하는 것입니다. 어떤 개념을 명확하게하지 않는다.

+0

아마도 더 나은 중복 : [.NET : 속성은 무엇입니까?] (http://stackoverflow.com/questions/20346/net-what-are-attributes) –

+0

나는 그것들이 중복 된 것인지 확실하지 않습니다. 여기서의 질문은 장면 뒤에서 일어나는 일에 대해 명시 적으로 설명합니다. –

+0

그 글을 읽었습니다. 그것은 그들에 대한 개념이 아닌 속성의 사용에 관한 것입니다. – n3verLieMe

답변

2

그들은 단순한 형태의 정의 (인스턴스가 아님)에 저장된 메타 데이터이다. 예를 들어, 내가 할 경우 :

[Description("some text")] 
public string Name {get;set;} 

다음 "some text"description 생성자 매개 변수 DescriptionAttribute이 재산 Name에 대해 IL에 저장되어 있다는 사실. 이것은 각 인스턴스의 비용에 아무런 영향을 미치지 않으며 은 아무것도하지 않고 그 자체입니다. 이 데이터가 사용되는 유일한 시간은 코드가 런타임에 다음과 같이 명시 적으로 묻는 경우입니다.

  • "Name에 대해 추가 특성 메타 데이터를 갖고 있습니까?"
  • "NameDescriptionAttribute?" 다음

및 결과에 무언가를

  • "한 경우 DescriptionAttributeName에 저장 내게 구성하십시오."

    주의 : 컴파일러 및/또는 CLI 다르게 처리되며, 다르게 구현되어 일부 특성이있다. 예를 들어, [Serializable]은 일리노이 특성이 아닌 일종의 IL 유형 플래그가됩니다.하지만 런타임은 API가이를 다른 것처럼보고하도록 shims합니다.

  • 1

    속성은 매우 간단한 개념이지만 프레임 워크의 많은 부분이 마법처럼 보이는 방식으로 복잡합니다.

    속성은 메타 데이터에 불과합니다. 즉, 본질적으로 프레임 워크가 런타임에 해당 유형에 대한 설명을 읽을 수 있다는 주석입니다. 다양한 목적을위한 모든 종류의 속성이 있으며 이러한 속성을 찾는 다양한 코드가 있습니다.

    속성 자체는 아무 것도하지 않습니다. 그들을 읽으려면 다른 코드가 필요하다. 그런 다음 찾은 것을 바탕으로 무언가를하십시오.

    속성 클래스는 인스턴스화 된 다음 실행될 수 있지만 다른 코드가 요청할 경우에만 다시 실행할 수 있습니다. 이 코드의 대부분은 종종 프레임 워크에 의해 숨겨져 있습니다. 예를 들어, MVC에는 Post 또는 Get 메소드 인 메소드 선언에 사용되는 속성이 있습니다.메소드가 호출되기 전에 인증되어야한다는 것입니다 ... 이러한 속성은 MVC 프레임 워크가 MVC 프레임 워크를 점검하고 MVC 프레임 워크를 기반으로 조치를 취하는 코드가 있기 때문에 유용합니다.

    간단히 말해서, 속성은 아무 것도하지 않습니다. 그것은 단지 그것을 사용하는 다른 코드 (일반적으로 프레임 워크에서)와 함께 작동합니다. 따라서 속성은 누구나 꿈꿀 수있는 거의 모든 것일 수 있습니다.

    관련 문제