2010-05-05 4 views
0

좀 더 oop 프로그램에 넣으려면 클래스에 액세스 할 수있는 한 클래스 (개체)에서 개인 인스턴스 변수를 만들려고합니다.C# 개인 인스턴스 변수를 accesable (들쭉날쭉 한 배열) 만들기

개인 바이트 [] [] J;

이 코드는 모두 이와 같은 톱니 모양의 배열을 나타냅니다.
이제는 다른 클래스에서 모든 for 루프를 콘솔 라이 트와 함께 사용하여 원하는 결과를 표시했습니다. 기본적으로 "J라는 이름은 현재 상황에 존재하지 않습니다"라고 말합니다.
하지만이 J를 얼마나 정확하게 액세스 할 수 있습니까?

내가 GET으로 노력하고 설정하지만 난 점점 '바이트 [] []을 바이트로 변환 할 수 없습니다'계속 한

또한 내가 cyntax 어떤 종류의 GET으로 필요 설정합니다?

이와 비슷한 기능이 있습니까? 아니면 몇 가지 단계가 더 필요합니까? : 내가 제대로 상황을 이해한다면

public Byte JArray 
get { return J; } //can converrt to byte here 
set { J = value; } //cannnot convert to byte here 

종류가

답변

12

는, 속성의 유형이 변수의 유형 (또는 호환)와 동일하게 있습니다, 그러나

public byte[][] JArray 
{ 
    get { return J; } 
    set { J = value; } 
} 

당신은 아마하지 않습니다 호출자가 J를 변경하여 다른 지그재그 어레이를 참조 할 수 없도록 실제로 설정자를 필요로하지 않는 한, 실제로 setter가 필요합니다. 게터를 사용하면 여전히 배열을 범위 내에서 값을 변경할 수 있지만 변수 자체는 변경할 수 없습니다. 그러나 심지어이와

, 발신자가 여전히 한 번에 전체 "열"변경에서 "외부"배열의 내용을 변경할 수 있습니다 :

foo.JArray[10] = new byte[10]; 

대안이 클래스에 인덱서를 추가하는 것입니다 :

public byte this[int x, int y] 
{ 
    get { return J[x][y]; } 
    set { J[x][y] = value; } 
} 

는이 배열에 의해 뒷받침 사실을 숨기고, 발신자가 실제 요소에 액세스 할 수 있습니다.

배열을 직접 표시하는 것은 일반적으로 나쁜 생각입니다. 실제로는 마음이 consider arrays to be somewhat harmful입니다.

+0

안녕하세요. 입력 해 주셔서 감사합니다. 다음과 같은 의미입니까? 공개 바이트 JArray { get {return Convert.ToByte (J); } }/* 지그재그 */ 다른 클래스에서 액세스 할 수는 없지만. – Chris

+1

@Chris : 문제가 너무 복잡해졌습니다. 배열을 공개하고 싶다면 Jon의 첫 번째 샘플 구문을 사용하여 배열을 노출해야한다. 그가 지적했듯이, 당신은 setter를 원하지 않을 것이고, 배열을 노출시키고 싶지는 않을 것이다. –

+0

+1, 대신 색인 작성기를 작성하는 중이었습니다. – Blindy

1

과 관련, 문제는 유형이 일치하지 않는 점이다.

변수 유형이 byte[][] (즉, 바이트 배열)이므로 속성의 반환 유형은 byte[][]이어야합니다. 현재는 Byte입니다.

1

개인 변수의 유형과 공용 속성이 동일하지 않기 때문입니다. 이 시도 :

public byte[][] JArray 
{ 
    get { return J; } 
    set { J = value; } 
} 

심지어 짧은를 자동 등록을 사용 :

public byte[][] JArray { get; set; } 
1

를 J는 [] []를 입력 바이트의 경우, 연관 특성은 [] []를 입력 바이트이어야한다. 당신이 속성을 통해 변수를 노출 할 경우

관련 문제