2013-07-14 3 views
0

속성 집합을 정의하는 추상 클래스가 있습니다. 이로 인해이 속성에 대한 메모리를 할당하기 위해 자식 클래스의 각 인스턴스 (재정의 속성 필요)가 생성됩니까? 내가 묻는 이유는 어떤 자식 클래스는 속성을 필요로하고 어떤 클래스는 절대 필요하지 않지만 다른 클래스는 추상 클래스의 속성에 액세스한다는 것입니다. 추상 클래스의 재정의 속성에 대한 메모리 할당

그리고 나는이처럼 재정의하는지 여부를 차이 만들 않습니다 (? 어쩌면 더 메모리 관련 분야에 할당되지 않기 때문에, 목적에 빈 가져 오기 및 설정 방법을 유지)
public override int someProperty {get; set;} 

또는 같은

public override int someProperty 
    { 
     get 
     { 
     } 
     set 
     { 
     } 
    } 

첫 번째 질문이므로 모든 사항을 올바르게 묻기 바랍니다.

+0

메모리가 부족합니까? 수백만 개의 인스턴스를 만들지 않는다면 걱정하지 않아도됩니다. – Blorgbeard

+2

두 번째 형식은 유효하지 않습니다.'get' 구현체 *는 값을 반환합니다. –

+0

Blorgbeard, 나는 아니에요. 그러나 많은 사람들이 그렇습니다. – bubbles

답변

3

속성은 반드시 저장소가 할당된다는 것을 의미하지는 않습니다. 속성은 getset 메서드 주위의 구문 설탕입니다. 데이터를 저장할 필드가없는 한, 메서드 쌍입니다.

예 :베이스 클래스는이 같은 특성이있는 경우 :

public virtual int SomeProperty { get { return 0; } { set { } } 

그런 다음 어떤 스토리지를 할당하지 않습니다.

하지만 당신은 자동 속성을 사용하는 경우 :

public virtual int SomeProperty { get; set; } 

그런 다음 저장 할당되는 생성 된 자동 백업 필드가 존재입니다.

+0

이 경우, 첫 번째 메소드 ('virtual'보다는'override')와 같은 override 메소드를 사용하면, 속성을 필요로하지 않는 각각의 자식 클래스에 대해, 메모리 지향적입니다. – bubbles

+0

예, 기본 클래스에 배경 필드가없고 하위 클래스에 배경 필드가없는 경우 저장 공간이 없습니다. 'abstract'가 아닌'virtual' 속성을 만들면, 그것을 사용하고 싶지 않으면 그것을 오버라이드 할 필요조차 없습니다. – Blorgbeard

+0

글쎄, 기본 클래스와 속성은 둘 다'abstract'이므로 배킹 필드가없는 것 같네요? 그리고 나는 추상적 인 것보다'가상적인'것을 사용하려고 노력할 것이다. 나는'abstract' 클래스에'abstract' 속성과 메소드를 사용해야한다고 생각했습니다. – bubbles

관련 문제