2011-04-28 5 views
0

C#에서는 파생 된/구현하는 모든 유형에서 구현할 정적 메서드를 어떻게 정의 할 수 있습니까? 인터페이스 내에서 정적 메서드를 정의 할 수 없다는 것을 알고 있습니다.모든 구현 유형에서 공유되는 정적 메서드

기본 전제는 다음과 같이이다 : 나는 유기체의 기본 클래스를 예를 들어

말. 파생 된 유형은 인간 및 개입니다.

주어진 유기체가 가지고있는 다리의 수를 말해 줄 수있는 방법이 필요합니다. 그래서 인간은 2, 개는 4 등이 될 것입니다.

나는이 방법을 인스턴스 메소드로 만들 수 있지만 모든 Dog 타입에 대해 동일한 메소드가 될 것이므로별로 의미가 없습니다. 모든 인간 유형에 대해 동일합니다.

+0

http://stackoverflow.com/questions/248263/why-cant-i-declare-c-methods-virtual-and-static –

답변

6

나는 당신이 완벽하게 이해하고 있다고 생각하지 않습니다. 그것은 인스턴스 메소드가되도록 완벽하게 이해합니다.

개가 2 개 (운이 좋음) 운이 좋고 다리를 잃어서 운이 좋으면 어떻게 될까요? 당신의 모델로 개 종 전체가 방금 다리를 잃었습니까?

그러나 더 나은 모델

:

#psudo 
class Organism{ 
    public abstract void legs(){ return 0;} 
} 
class Dog : Organism{ 
    private int _legs; 
    public int legs(){ return _legs; } 
} 

는 운이 단지 다리를 잃을 것입니다.


+0

Ahh, 내 AP Physics 수업을 상기시켜줍니다. Will E. Bounce가 2.4 미터/초로 2 차선 도로를 가로 질러 북쪽으로 걷고 있습니다. 각 레인은 4 미터 너비입니다. 트럭이 초당 30 미터로 동쪽으로 움직입니다. 트럭이 200m 떨어진 먼 차선에 있고 병합되지 않으면 Will E. Bounce? – Scott

0

인스턴스 메소드로 지정하십시오. 상속을 사용하면 파생 클래스가 적절한 값을 반환하는 자체 버전을 구현해야합니다.

0

이와 비슷한 것.

abstract class Organism 
{ 
    public abstract int NumberOfLegs(); 
} 

abstract class Biped : Organism 
{ 
    public sealed override int NumberOfLegs() 
    { 
     return 2; 
    } 
} 


abstract class Quadroped : Organism 
{ 
    public sealed override int NumberOfLegs() 
    { 
     return 4; 
    } 
} 

class Humand : Biped 
{ 

} 



class Dog : Quadroped 
{ 

} 

하지만 이러한 분류와 가정의 그 종류의 베이킹에 대한 더 많은 걱정을 사용하는 방법에 대한 걱정이 될 것입니다. 정적 유형의 언어에 대한 좋은 점 중 하나는 나쁜 가정을 다시해야 할 때, 그 가정에 의존하는 모든 코드를 살펴 봐야한다는 것입니다. 이것은 좋은 일입니다.