2014-11-13 16 views
0

그래서 나는 보드라는 클래스의 배열을 가지고 있습니다.클래스에서 공용 배열 만들기

배열은 다음과 같습니다 ... 같은 비숍과 나이트와 루크 요법 등의 작품의 일부 하위 클래스가 있습니다

Piece[,] board = new Piece[8,8]; 
board[0,0] = new Bishop(constructor stuff); 
board[0,1] = new Rook(constructor stuff); 

요법 ...

때마다 나는 Bishop/Knight/Rook의 새 인스턴스를 초기화합니다. 다음과 같이 을 수행 할 수 있도록 자신의 배열을 갖고 싶습니다.

board[0,0].array[0] = ect... 

어떻게하면됩니까?

+2

'Piece'에'array' 속성을 추가합니다 (그러나 더 나은 이름을 선택하십시오). 그런 다음'Piece' 생성자에서 초기화하십시오. –

+1

호기심 - 왜 Piece 객체 내에서 배열 속성을 찾고 있습니까? 저건 뭘위한거야? – alykins

+0

@alykins 배열에는 조각에 사용할 수있는 동작 목록이 포함됩니다. 따라서 플레이어가 이동을 입력하면 컴퓨터가 유효한지 확인할 수 있습니다. – vroomvsr

답변

-1

배열을 Piece 클래스에 추가하십시오. 모든 하위 클래스가 액세스 할 수 있습니다.

class Piece 
{ 
    public int[] array = new int[100]; // or whatever 

    // rest of class definition 
} 
+0

downvoter의 의견에 신경 쓰겠습니까? – Blorgbeard

-1

배열이라는 배열 클래스에 변수를 추가 하시겠습니까?

Ex.

public class Bishop : Piece 
{ 
    // ... 
    public T[] array; 

    public Bishop() 
     : base() 
    { 
     // Initialize array 
    } 
} 

여기서 T는 배열 유형입니다.

배열 유형이 다를 수 있으므로 클래스를 일반화 할 수 있습니다.

public class Bishop<T> : Piece 

그 다음이 좋아 초기화 :

board[0,0] = new Bishop<int>(); // array is int[] 

가 실제로 언어의 기초를 학습을 건의 할 것입니다.

+0

나는 당신이 똑같이하는 것이 좋습니다. 각 서브 클래스에서 배열을 선언하면 캐스팅하지 않고'Piece'의 배열을 통해 액세스 할 수 없다는 것을 의미합니다. 또한 제네릭을 필요로하는 것에 대해서는 언급이 없었습니다. – Blorgbeard

0

조각 클래스에 정의 된 배열에 대한 필드 또는 속성이 있어야합니다.

public abstract class Piece 
{ 
    public Something[] array = new Something[ARRAY_SIZE];  
    ... 
} 

실제로 이것이 좋은 디자인인지 여부를 고려하십시오.

관련 문제