2013-07-09 45 views
0

我想創建類Massive並添加一個方法來添加兩個海量元素。但是我的類實例的屬性Length不起作用。使長度屬性可用於我的類C#

public static void Add(Massiv mas1, Massiv mas2, ref Massiv mas3) 
    { 

     if (mas1.Length != mas2.Length) 
     { 
      Console.WriteLine("Error!"); return; 
     } 

     for (int i = 0; i < mas.Length; ++i) 
     { 
      mas3[i] = mas1[i] + mas2[i]; 
     } 
    } 

如何使它可用於我的課堂? 這是我的代碼。

class Massiv 
    { 
    public Massiv(int n) 
    { 
     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() 
    { 
     Console.WriteLine("Massive: "); 
     foreach (var elem in mas) 
     { 
      Console.Write(elem + " "); 
     } 
     Console.WriteLine(); 
    } 

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

    public static void Add(Massiv mas1, Massiv mas2, ref Massiv mas3) 
    { 

     if (mas1.Length != mas2.Length) 
     { 
      Console.WriteLine("Error!"); return; 
     } 

     for (int i = 0; i < mas.Length; ++i) 
     { 
      mas3[i] = mas1[i] + mas2[i]; 
     } 
    } 

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

    private int[] mas; 
} 

}

+1

你爲什麼要這樣定義'Add',而不是聲明['operator +'](http://msdn.microsoft.com/en-us/library/s53ehcz3.aspx)? –

+0

非常感謝這個有趣的想法! – Heidel

+1

特別是因爲目前你的'Add'有兩種方式破壞 - a)你打算把'mas3'設置成正確尺寸的新物體,但是失敗了,或者b)你沒有檢查傳入的'mas3'對象的長度是否正確,以接受'for'循環產生的值。 –

回答

3

好像你還沒有宣佈任何Length財產,因此,編譯器不可能知道的。

基本上,它添加到您的類:

public int Length { 
    get { 
    } 
    set { 
    } 
} 

在消氣,你需要返回屬性的值,而在二傳手,你將不得不改變它。

在這種情況下,您似乎想要檢索內部數組的長度。如果你不需要寫訪問,你可以跳過set部分:

public int Length { 
    get { 
     return mas.Length; 
    } 
} 
+1

非常感謝解釋! – Heidel

0
public int Length { 
    get { 
     return mas.Length; 
    } 
} 
2

就在這個屬性添加到您的類:

public int Length { 
    get { return mas.Length; } 
} 

注意它只有一個get訪問,這使它成爲只讀的(自從您在構造函數中初始化私有數組後,您似乎不需要寫入權限)。