2012-07-14 3 views
0

저는 C 프로그래밍에 익숙하지 않으므로 제 용어가 잘못되었을 때 제게 정정하십시오.동일한 객체로 두 개의 다른 클래스를 호출하는 경우

내가 그냥 같은 object.the 코드에서 2 개 개의 다른 클래스를 사용할 수있는 경우, 부탁드립니다

은 다음과 같이 간다 :

//from the Animal Class; 
    public void Run() 
    { 
    int counter = 0; 
    string input = "Beagle"; 
    string input2 = "Fox Terrier"; 
    Dog[] al = new Dog[10]; 
    do 
    { 
    al[counter] = new Dog(); 
    al[counter].validateAnimal(input); 
    al[counter] = new Breed(); 
    Breed br = (Breed)al[counter]; 
    br.validateBreed(input2); 
    }while(counter < 10) 
} 
    //Dog Class 
    //Dog : Animal 
    public void validateDog(string In) 
    { 
    if(In == "Beagle") 
    { 
    Console.WriteLine("Ok"); 
    } 
    } 

//breed class 
// Breed : Dog 
public void validateBreed(string In) 
{ 
if(In == "Fox Terrier") 
{ 
Console.WriteLine("Great"); 
} 
} 

내가이 validateDog 및 validateBreed 모두를 실행하고 싶은 메인 클래스에서 운영되고 있습니다. 나는 또한 Breed를 Dog의 파생 클래스로, Dog를 파생 클래스로 만들어야합니다. 구문 오류가없는 것 같습니다. validateBreed는 표시되지 않습니다.

무엇이 문제입니까? 가지고

+0

'할 일'이 곧 끝나지 않습니다. 게다가, 카운터에있는 Dog는 같은 장소에있는 Breed에 의해 덮어 쓰여질 것입니다. 이것은 C#과 관련이 없습니다. –

답변

0

필요 품종이 잘못된 요구 사항입니다 개

의 파생 클래스합니다. 번식은 '개 종류'가 아니며 번식은 property of Dog입니다. 파생 클래스를 만드는 대신 Breed 속성을 Dog 클래스에 만들어야합니다.

enum에 사용 가능한 모든 품종을 나열하거나 그에 대한 클래스를 정의 할 수 있습니다.

public enum Breed { Beagle, Husky } 

public class Dog 
{ 
    public Dog(Breed breed) 
    { 
     this.Breed = breed; 
    } 

    public Breed Breed { get; private set; } 
} 

공지 사항이 품종은 생성자에 전달되는 보통 품종을 변경하지 마십시오 개 이후 Dog 클래스 외부 수정할 수 없습니다.

업데이트 :

전체 코드를 게시해야합니다. 지금하고있는 일을 말하기가 어렵습니다. 샘플에서이 작동합니다 : 두 가지 방법으로

var breed = new Breed(); 
breed.validateDog(""); 
breed.validateBreed(""); 

가 공개됩니다.

validate 가상 클래스를 기본 클래스로 정의하고 파생 클래스에서 재정의 할 수 있습니다.

+0

오, 그렇습니다. 예를 들어 미안 해요. 예를 들어 개를 사용했습니다.하지만, 주 (generic) 클래스에서 validateDog와 validateBreed를 둘 다 실행하면 강아지가 상속되고 개가 상속됩니다. 동물에게서, 구문 론적으로, 무엇이 잘못 되었습니까? – marchemike

관련 문제