[英]Is it better to have a public readonly object, identical local readonly objects per class, or to directly reference a library object?
我在XNA中使用C#構建一個游戲,我不確定這四種方法中哪一個最好只能引用“視口”來讀取訪問權限:
有一個公共靜態變量,每個類都可以通過調用Game.Viewport來訪問(Game是主類:
public static readonly Viewport Viewport = GraphicsDevice.Viewport;
正在使用:
rectangle = new Rectangle (Game.Viewport/2, ...
有一個局部變量引用需要視口的每個類的視口:
private readonly Viewport viewport = GraphicsDevice.Viewport;
正在使用:
rectangle = new Rectangle (viewport/2, ...
使用傳遞給需要視口的每個類的構造函數的局部變量(這將是唯一一個不需要導入Microsoft.Xna.Framework.Graphics的類):
私人只讀視口視口;
然后在構造函數中:
viewport = pViewport;
正在使用:
rectangle = new Rectangle (viewport/2, ...
在需要(使用中)的任何地方直接從類庫中引用視口:
rectangle = new Rectangle(GraphicsDevice.Viewport.Width / 2,...
我想知道哪一個在速度方面最好,哪個在可讀性方面最好。 就個人而言,我覺得第四種方法最簡單,最快,所以我不需要創建任何對視口的引用,很明顯我指的是全局的東西。 看起來它正在取出“中間人”,但是你必須將XNA圖形庫導入到使用Viewport的每個類。
你們有什么感想?
我想這取決於你的設計。 如果這只是一個簡單的一次性應用程序,我會選擇你的第一個例子。 您有一個視口,您的所有類都不依賴於GraphicsDevice
或者您決定管理該視口。
將單個對象存儲在那里並在代碼中引用它將很快; 它只是一個場參考,所以它們的速度並不快。 每次都調用GraphicsDevice.Viewport
, 特別是因為它是一個屬性意味着你每次想要訪問它時都會運行一個屬性getter方法。
編輯:如果你想快速在Game.Viewport
(而不是一個字段)上Game.Viewport
一個屬性包裝器,這樣你就可以暫時跟蹤訪問(比如記錄),那么你就可以這樣做了。 如果您使用GraphicsDevice.Viewport
選擇后者,則必須在代碼中的每個位置執行此操作(代碼重復)。
如果這是一個更可重用的庫, 如果將Viewport的訪問權限限制在相關的類中,或者想要將依賴項與Game
分開是有意義的,那么通過構造函數將它作為依賴注入傳遞下來是值得的,特別是當它來到時進行單元測試。
我甚至不會考慮選項2(將每個類的GraphicsDevice.Viewport
評估為私有字段)。 至少你可以用你自己的可重復使用的靜態類包裝它(這是你在Game
做的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.