2014-03-27 53 views
1

這個問題本身與XNA沒有直接關係,但是我遇到的問題是。我對引用對象到方法/函數的性能效果感興趣。例如,在XNA中,當只需要特定的值或像GraphicsDevice這樣的對象時,我經常會看到引用完整Game1對象的代碼,或者只是在層次結構中更深層的視口。我總是參考具體的價值或對象,因爲我認爲這是最佳做法,通常我必須返回並根據需要添加其他值。引用對象的最佳做法

那麼爲方法/函數引用值和對象的最佳做法是什麼?它有多重要還是隻是一些指針?所以一個指向簡單的int或一個巨大的對象的指針會是相同的?事情變得更加明顯,當它被存儲在屬性中的另一個類中時,需要爲該屬性保留另一個內存塊,對吧?

+1

您不應僅引用孔對象,而只使用特定的屬性。你的方法是正確的,如果他們不打算被他人使用(封裝),你甚至不應該暴露對象的屬性和方法。 –

回答

1

爲了僅訪問其中一小部分的比例/方法而「引用」一個對象並不是好的做法。這是更好的暴露所需的功能,使其靜態的,那麼這樣做:

// Calling a static method 
Game1.DoSomething(); 
// Accessing a static property 
int test += Game1.MyInt; 

我想,爲什麼你看到XNA代碼示例引用整個對象的原因是因爲一些XNA程序員不與直接使用C#的開發人員相比,他們具有面向對象的開發背景,因此不瞭解有效使用該語言的最佳實踐。

+0

你說效率很高,但是有沒有測試它對性能有多大的影響?引用每秒60次的整數與一個包含幾百字節的完整對象之間有什麼區別? – Madmenyo

+0

我不知道任何可以鏈接到的測試。我懷疑在時間上會有明顯的差異。通過高效,我在封裝方面進行了討論,並使用更少的代碼來做更多的事情。例如,爲什麼要創建一個指向堆上現有內存區域的新對象?我們可以跳過它並公開我們需要的內容並訪問它,而無需創建新對象。 – user3256944

+1

「爲什麼,例如,創建一個新對象...」它不會創建一個新對象。它只是傳遞一個對已經存在的對象的引用。實際上,關於性能的效率如何。不幸的是,它緊密地將調用對象連接到傳遞的對象上,當在有許多開發者修改所有代碼的環境中工作時,這可能會有風險。 (Bob叔叔不會喜歡它) –