c# - Is it better to have a public readonly object, identical local readonly objects per class, or to directly reference a library object? -
i'm building game using c# in xna , i'm not sure of these 4 ways best refer "viewport" reading access only:
have public static variable every class can access calling game.viewport (game main class:
public static readonly viewport viewport = graphicsdevice.viewport;
in use:
rectangle = new rectangle (game.viewport/2, ... have local variable refers viewport each class needs viewport:
private readonly viewport viewport = graphicsdevice.viewport;
in use:
rectangle = new rectangle (viewport/2, ... use local variable passed down constructor of each class needs viewport (this 1 didn't require imported microsoft.xna.framework.graphics):
private readonly viewport viewport;
then in constructor:
viewport = pviewport; in use:
rectangle = new rectangle (viewport/2, ... directly reference viewport class library everywhere it's needed (in use):
rectangle = new rectangle (graphicsdevice.viewport.width/2, ...
i wondering 1 best in terms of speed , 1 best in terms of readability. personally, feel fourth method easiest , fastest don't need create references viewport , it's clear i'm referring global. seems it's taking out "middleman", have import xna graphics library every class uses viewport.
what guys think?
i suppose depends on design. if simple, one-off application, i'd go first example. have single viewport, none of classes dependent on graphicsdevice or decide manage viewport.
storing single object there , referencing in code fast; it's field reference don't come faster that. calling graphicsdevice.viewport every time, especially since it's property means you'll running property getter method every single time want access it.
edit: if want throw in property wrapper on game.viewport (instead of field) can track access (say logging) temporarily, you're free way. if choose latter graphicsdevice.viewport, have every place in code call (code duplication).
if more reusable library, if makes sense restrict access viewport relevant classes, or want separate dependency game, passing down via constructors dependency injection can worthwhile, when comes unit testing.
i wouldn't consider option 2 (evaluating graphicsdevice.viewport each class private field). @ least wrap own reusable static class (which you're doing game)
Comments
Post a Comment