2014-12-07 2 views
0

3 가지 개체가 있습니다. 상자, 정사각형, 삼각형을 호출 할 수 있습니다. 이제 개체를 전달해야하는 업데이트 함수를 만들고 싶습니다. 내가 아는 한,이 함수는 가끔 그들 중 하나를 업데이트 할 경우에도 세 개의 개체를 전달할 저를 필요로이C#의 개체 사용

void Update(Box box, Square square, Triangle triangle) 
{ 
    //do something 
} 

과 같을 것이다. 내가 아는 또 다른 방법은 이전에 생성자에서 객체를 초기화하고 클래스 내부의 private 변수로 전달하는 것입니다. 그런 다음 모든 개체를 업데이트할지 여부에 관계없이 모든 개체를 업데이트합니다.

void Update() 
{ 
    //do something for Box 
    //do the same for Square 
    //do the same for Triangle 
} 

이렇게하려면 많은 코드가 필요하며 때로는 불필요합니다. 자, 내가 원하는 객체를 전달하고 동일한 코드를 수행 할 수있는 방법이 있습니까? 예 :

void Update(Object randomObject) 
{ 
    //do something for the randomObject whether its Square, Box or Triangle 
} 
+0

왜 각 클래스에 Update 메서드가 없습니까? 그래서 모든 인스턴스 자체를 업데이트 할 수 있습니까? 또는 파생 클래스마다 업데이트 메서드를 구현하도록하는 추상 기본 클래스에서 세 클래스를 파생시킬 수 있습니까? 접근 방식은 객체 지향적이지는 않지만 더 많은 컨텍스트를 제공해야합니다. 상자를 정사각형이나 삼각형으로 업데이트 할 수있는이 클래스는 무엇입니까? – Steve

+0

해당 객체와 플레이어 간의 충돌을 감지하는 클래스입니다. 이제는 모든 객체 사이의 충돌을 감지하는 동일한 방식의 클래스 내부에 함수가 있습니다.문제는 각 객체에 동일한 코드를 3 번 ​​써야한다는 것입니다. 객체가 같은 유형이 아니기 때문에 모든 객체를 하나의 코드에 넣고 하나의 객체를 전달할 수 없기 때문입니다. 내가 설명하기를 바란다. 정말 어렵다. 어쨌든, 내가 찾고있는 것은 인자로 전달할 수있는 보편적 인 객체이며, 내가 원한다면 Square, Triangle 또는 Box를 참조 할 수 있습니다. –

답변

1

당신은 기본 클래스 또는 인터페이스를 사용하여 객체를위한 공통 인터페이스를 정의 할 수 있습니다. 귀하의 예를 들어, Shape 기본 클래스를 할 수 :

public abstract class Shape 
{ 
    // Put common methods here, possibly abstract: 
    public abstract double Area(); 
} 

그런 모양의 상속자로 구체적인 모양을 정의

public class Box : Shape 
{ 
    public double Area() { return _width * _height; } 
} 

// etc. 

그런 다음 당신이 당신의 Update 방법은 모양 인수를 할 수 있습니다. 파라미터는 이제 Shape을 상속 수업 중 하나가 될 수 있고, 구현은 구체적인 구현에 연기되는 것을 의미 당신이 필요로하는 것, 그래서 당신은이 상황에서 추상 Shape

void Update(Shape shape) 
{ 
} 

에 정의 된 방법 중 하나를 사용할 수 있습니다 Box 클래스에 구현 된 Area 구현과 같은 구체적인 클래스에서 구현을 제공 할 수 있습니다. 물론 기본 클래스에서 비 추상 메서드를 정의 할 수도 있습니다.

0

예, OO 프로그래밍 - 다형성의 주요 기능 중 하나를 사용하십시오. 세 클래스는 같은 기본 클래스에서 상속해야합니다. 이 클래스에서는 메소드 업데이트를 구현합니다. Polymorphism

0

나는 시나리오의 세부 사항을 알고하지 않습니다하지만 당신은 이런 식으로 뭔가 할 수

void Update(Box box = null, Square square = null, Triangle triangle = null) 
{ 
    if(box !=null) 
    { 
     //Do box update 
    } 
    if(square !=null) 
    { 
     //Do square update 
    } 
    if(triangle !=null) 
    { 
     //Do triangle update 
    } 
} 

을 당신이 할 수 있다면 당신은

Update(square: mysquare); 

어쨌든 하나 또는 두 개의 개체에 대해이 메소드를 호출 할 수 모델 디자인을 조작하여 모든 세 클래스를 하나의 기본 클래스에서 상속 받아 더 좋게 만듭니다.