2010-07-16 8 views
1

아래 예에서 number 필드를 정의했습니다. 이 필드는 원했던대로 작동하지만 내 기대치를 제공하는 것만으로는 충분하지 않습니다.필드는 각 클래스의 고정 값이며 필드는 종속 인스턴스가 아닙니다 ...?

숫자 값은 각 클래스에 대한 고정 값이며 숫자는 종속 인스턴스가 아니며 숫자는 다형성을 지원합니다. 내가 어떻게 할 수 있니? 아니면 인스턴스에 대한 unneccesary 번호 필드를 사용하지 않는 또 다른 솔루션이 있습니까?

abstract class Main 
{ 
    public int number; 
    public virtual void dostuff(){ 
     int x = number; 
    } 
} 
class Derived:Main 
{ 

    public ovverride void dostuff(){ 
     int x = number; 
    } 
} 

답변

0

당신은 속성이 정적하고 다음 각 클래스에 추가 할 수 있습니다

abstract class Main 
{ 
    public static int number; 
    public virtual void dostuff(){ 
     int x = Main.number; 
    } 
} 
class Derived : Main 
{ 
    public static int number; 
    public overide void dostuff(){ 
     int x = Derived.number; 
    } 
} 

편집 : 나는 polymorhism에 대한 의견 혼란을 조금 그래서 좀 더 많은 예제를 추가했습니다입니다.

Main obj = new Derived(); 
obj.doStuff(); //This will use Derived.number; as doStuff is and overidden virtual method. 

다음을 수행하지만 경우 :

abstract class Main 
{ 
    public static int number; 
    public void dostuff(){ 
     int x = Main.number; 
    } 
} 
class Derived : Main 
{ 
    public static int number; 
    public new void dostuff(){ 
     int x = Derived.number; 
    } 
} 

그런 다음 아래로 다른 동작을 얻을 :

Main obj = new Derived(); 
obj.doStuff() // Will use Main.number 
Derived obj2 = (Derived)obj; 
obj2.doStuff() // Will use Derived.number 

당신은 내가 여기에 정의 havn't는 행동의 다른 종류를 원한다면 내가 원하는 걸 이해하지 못해서 exaplin 해줘.

+0

Derived에서 숫자를 복제 할 필요는 없습니다. 파생 클래스는 'number'라고만 말하면 Main.number에 액세스 할 수 있습니다. –

+0

질문을 편집하여 pls에서 확인할 수 있습니까? 메소드를 가상으로 정의하는 것을 잊어 버렸습니다. – Freshblood

+0

그는 각 클래스마다 다르지만 인스턴스마다 다르다고 말했다. 이것은 그렇게 할 것입니다. –

0

당신은 단지 숫자 속성하고 초기화 할 수 각 클래스 생성자에 : 나는 스틱의 잘못된 말을 가지고 같은

abstract class Main 
{ 
    public int number{get; private set;} 

    public void dostuff(){ 
     int x = number; 
    } 
} 

class Derived:Main 
{ 
    public Derived() 
    { 
     number = 5; // Specific value for each derived class 
    } 
    public void dostuff(){ 
     int x = number; 
    } 
} 

이 보이는 - 가 정적으로를 설정하는 방법은 수 있도록하려면 이미 응답 된 클래스 유형마다.