Considera questo:
public MyClass
{
private Resource _myResource;
public Resource MyResource
{
get
{
if(_myResource == null)
{
_myResource = new Resource();
}
return _myResource;
}
}
public void UseResource()
{
MyResource.DoSomething();
}
}
È un modello riconosciuto o forse un anti-pattern? Non l'ho mai visto suggerito in nessun libro, ma viene visualizzato più e più volte nel codice che vedo. Penso che la logica di ciò sia che _myResource viene istanziato 'just in time'. Per me, sembra un po 'puzzolente. UserResource () accede a una proprietà pubblica all'interno della classe e la risorsa non può mai essere realmente accessibile tramite il membro privato - se qualcuno lo ha fatto, _myResource potrebbe essere nullo.
Forse a volte potrebbero essere necessarie delle prestazioni, ma generalmente preferirei creare un'istanza nel costruttore, o semplicemente avere un'istanza di Risorsa locale per il metodo.
Quindi questo è uno schema accettato o dovrebbe essere evitato?