는 C#

2013-07-08 3 views
-7
나는 C#에서 대규모 클래스를 만들 필요가

대규모 클래스를 작성,이 코드를했는데, 그것은 바로는 C#

using System; 

namespace Massiv1 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.Write("n = "); 
     int n = Convert.ToInt32(Console.ReadLine()); 
     Massiv mas = new Massiv(n); 

     mas.ShowAll(); 

     Console.Write("i = "); 
     int i = Convert.ToInt32(Console.ReadLine()); 
     mas.ShowElement(i); 

     Console.ReadLine(); 
    } 
} 

class Massiv 
{ 
    public Massiv(int n) 
    { 
     int[] mas = new int[n]; 
     Random rand = new Random(); 
     for (int i = 0; i < mas.Length; ++i) 
     { 
      mas[i] = rand.Next(0, 10); 
     } 
    } 

    public void ShowAll() 
    { 
     foreach (var elem in mas) 
     { 
      Console.Write(elem + " "); 
     } 
     Console.WriteLine(); 
    } 

    public void ShowElement(int index) 
    { 
     try 
     { 
      Console.WriteLine("index {0} mas{1} = ", index, mas[index]); 
     } 
     catch (NullReferenceException) 
     { 
      Console.WriteLine("Error!"); 
     } 
    } 

    public int this[int index] 
    { 
     get { return mas[index]; } 
     set { mas[index] = value; } 
    } 

    private int[] mas; 
} 
} 

내 방법 ShowAll 관련이 작동하지 않는 일 does'n 나는 이유를 이해 해달라고. 그것을 고치는 방법?

+2

그것이 작동하지 않는다는 것이 무엇을 의미합니까? 당신이 원하는 것을 인쇄하지 않습니까? 그것은 당신에게 오류를 제공합니까? – SOfanatic

+1

자세한 내용을 알려 주셔야합니다. 이 코드로 무엇을하려고합니까? ShowAll은 어떻게 작동하지 않습니까? 오류? 잘못된 출력입니까? – Tim

답변

11

함께

int[] mas = new int[n];

를 교체

mas = new int[n];

필드를 사용하고 싶습니다. 지금은 생성자의 데이터를 ShowAll 메서드에서 사용할 수없는 로컬 변수에 할당하고 있습니다.

+0

덕분에 지금은 효과가 있으며 왜 도움이되었는지 설명 할 수 있습니까? 나는 정말로 무엇이 잘못되었는지를 이해하지 못한다. – Heidel

+0

생성자의 int [] 정의가 생성자의 작업을 완료 한 후 폐기 된 로컬 변수를 만들었습니다. 클래스의 필드를 사용하기 위해 값이 필드에 도달하지 않았으므로이 필드에 액세스해야합니다. –

+0

도움을 주셔서 감사합니다. – Heidel

2

편집 :

이 생성자에 (고화질) int[] masint[] 접두사를 제거, 그것은 원 mas에 대한 자신 필드 (하드 찾을 수) 정의를 차단하는 로컬 변수를 만듭니다.

편집 2 : 생성자 내부가 아닌 클래스 자체에 그렇게함으로써, 변수를 정의하는 방법 내가 주석에서 설명하고있는 바와 같이, 이것이, 당신은 생성자의 완료 후에 사용할 수없는 지역 변수를 생성 작업.

주목할만한 점은 클래스 상단에 필드/속성을 정의하는 것이 더 효과적이므로 여기서와 같은 숨겨진 필드를 찾는 것을 방지 할 수 있습니다. 또한

, 당신은 클래스 변수와 지역 변수에 대한 배워야한다, 여기보고를 제안 :

Variables and parameters

+0

페이지를 새로 고친 후 변경 내용을 확인하고 내 downvote를 제거했습니다. – Mansfield

+0

코드 하단을 확인하십시오. –

+0

ur 설명에 감사드립니다! – Heidel