2016-09-15 81 views
1

我在團結一個簡單的遊戲,並有一個小uncretainity,你可以幫我: 我必須命名一個類的新實例嗎? 例如:c#我必須爲新的類實例指定名稱嗎?

public class CreateCharacter : MonoBehaviour { 

public string charname; 

public CreateCharacter (string charname) 
{ 
    this.charname = charname; 
    //does all the stuff needed 
}} 

我想從另一個腳本運行此:

int e = data.Length - 1; 
      if (e > 0) 
      { 
       new CreateCharacter(data[e]); 
       e--; 
      } 

數據是一個字符串數組和CreateCharacter將新的字符對象存儲在這些對象的名單,這樣我就可以稍後再確定。我的問題是: 我必須寫:

CreateCharacter SomeName = new ChreateCharacter 

的代碼運行?或者很簡單

new Class (constructor) 

夠了嗎?

+1

如果實際上不需要構建和使用對象實例,那麼該行爲應該是靜態方法。 – Servy

+0

我將如何去解決這個靜態方法? – Bronsoner

+0

如果這個類必須繼承MonoBehaviour:不要使用構造函數和'new'。 –

回答

1

雖然對於新事物來說是不好的做法,而不是把它扔在變量中,那麼這些代碼會編譯並運行得很好。另外,是否有你有一個名爲CreateCharacter的類的原因?而不是一個函數返回給定數據的實際字符?

+0

我正在做一系列函數來創建列表中的對象 - 所以建築物初始化創建字符,字符初始化其他東西等等 - 所有這些都是通過從txt文件中吸取數據。也許那不是最佳的(我是一個noob),但幫助我邏輯地跟蹤事情的發生。如果有一個更簡單的方法來做到這一點,我很樂意學習。 – Bronsoner

+0

我認爲你會更好,只是簡單地使用你所描述的級聯函數,但你可能會新建一個建築物,這可能會創建一些很好的字符,或者Character有一個名爲CreateCharacter的靜態函數:Character.CreateCharacter(someData) 這些文本文件的格式是什麼? JSON?別的東西?你可以使用JSON和json.net直接創建角色。 –

+0

只是一個簡單的txt文件 - 我使用char分隔符來創建數據數組並讀取它,這樣我就可以獲取Character對象構造函數的所有必需數據。 – Bronsoner

1

它不會導致程序在沒有存儲的情況下死亡。

new CreateCharacter(data[e]);

但是,是的,你要保存它,所以你可以調用它的方法,如

CreateCharacter char = new CreateCharacter(string);

char.methodName();

你的另一個選擇是把你想代碼在static method中執行,因爲它似乎在構造函數中運行的代碼不依賴於類的實例CreateCharacter

+0

問題的前提是,他需要它運行的代碼在構造函數中(可能會導致副作用),而不是該類的其他方法。這通常是很差的做法,但肯定是可行的。 – Servy

+0

@Servy由於他的類被稱爲Unity的「CreateCharacter」,我99%確定他想將字符存儲在一個變量中。 –

+0

好吧,他非常有信心,他不需要任何東西,所以雖然可能是這樣設計課程會更好,但事實並非如此。 。 – Servy

1

您可以像您所說的那樣自行調用構造函數。但是請記住,新創建的對象將立即超出範圍,並在構造函數完成後解除分配。因此,根據「//所需的所有東西」中包含的內容,它可能會 - 潛在地使應用程序崩潰(儘管這不太可能)。

正如在其他答案中所述,在可讀性和功能性方面,將新創建的對象分配給變量是一個最佳實踐,即使僅限於該循環的範圍。

+0

由於對象離開作用域,導致應用程序非常難以崩潰。它可能需要不安全的代碼。擁有GC的全部意義在於它永遠不會收集其他(託管)代碼可能引用的任何內容。另外請注意,將它存儲在一個變量中,然後從不使用它不會改變任何內容;無論如何,GC都可以看到它沒有被讀取和收集。 – Servy

+0

讓我補充一點:我想運行CreateCharacter,它從文件(由構造函數指定)獲取數據,創建一個新的Character對象,將其添加到字符列表中,並且可以使用此Character對象完成所有工作。那麼這會運行得很好嗎? – Bronsoner

1

如果使用

新類(構造函數)

它是匿名的對象,它的工作。只要對象沒有從代碼的其他地方引用,就會使用這個對象的王,它的好處是你不應該爲此找到合適的名稱。

相關問題