2015-12-02 117 views
0

我是新來的編碼,現在仍然在大學。對不起,如果這個問題以前已經問過,但我什麼地方都看不到它。是否有可能爲Arrays c#創建構造函數?

我在想,是否可以爲數組Class創建一個構造函數,所以每次創建一個新數組時,我都可以執行代碼,例如計算我的應用程序中每個實例的數量。我明白Array類是抽象的,所以你不能創建它的一個實例。

int []數組是否只是抽象Array類中的方法?

任何洞察力,爲什麼它是或不可能的將不勝感激!

感謝

+1

你的問題有點過於含糊。 「所以每次我創建一個新的數組時,我都可以自動執行代碼?」 < - 你想如何填充數組?在一個循環?從另一個你已經擁有的館藏? –

+0

請勿使用不相關的標籤。這是一個C#問題 - 它不應該有一個'java'標記。 –

+4

你能舉一個你想要做什麼的例子,不管它有多麼錯誤?你是否想像'int []'和'float []'這樣的數組,或者像'MyObject []'這樣定義的新對象? –

回答

0

如果您的自定義代碼只是爲了填充陣列,C#提供了一些內置的方法來做到這一點(見All possible C# array initialization syntaxes)。

如果您希望每次創建特定類型的對象的實例時都執行代碼,則應該創建一個表示該對象的類(您也可以執行擴展方法,但這可能很有可能隨着時間的推移變得混亂)。這個類可能是沒有什麼比一個包裝更圍繞陣列:

public class MyArray<T> 
{ 
    private T[] _array; 

    public MyArray() 
    { 
     // execute your always must run code here! 
    } 

    public ArrVal 
    { 
     get { return _array; } 
     set { _array = value; } 
    } 
} 

... 

MyArray<int> myArray = new MyArray<int>(); // your custom code gets executed when you new up the object here 

然而,每best practices,你應該避免在做太多的工作(在我的經驗構造有代碼,具有引發異常構造可能會導致一些難以調試的問題,儘管MSDN認爲拋出異常比掩蓋異常要好)。如果這段代碼要做大量工作,最好創建一個單獨的方法(可能是public void Initialize()),以便調用者可以更懶惰地創建對象。

你也應該避免有這樣做所有陣列,因爲我可以保證它會導致問題爲您或其他人在路上時,他們想不通爲什麼int[] arr = new int[3]是做額外的東西。你應該看看在這裏正確地使用封裝(即創建一個包裝器/擴展/裝飾器類)。

此外,集合的現有.NET類之一完全可以滿足您的需求......請仔細研究這些類。

+1

從你的鏈接:*如果合適的話,從實例構造函數中拋出異常。* – chris

+0

啊,它的確如此。我混了一些東西,會編輯。 –

+0

乾杯的答覆丹這有助於:) – Sifer

0

我不知道如果我正確地理解你的問題,但如果你希望能夠當你創建一個數組,你可以使用LINQ執行代碼:

int[] myArray = new int[10] 
    .Select((x, idx) => /*execute your code here*/).ToArray(); 

所以,你可以創建數組長度爲10,那麼你可以爲每個元素執行代碼來確定你想要填充它。

例如,你可以使用填充隨機數字數組:

Random random = new Random(); 
int[] myRandomArray = new int[10] 
    .Select((x, idx) => random.Next()).ToArray(); 
相關問題