In C #, posso fare "this = ..." al di fuori di un costruttore? [chiuso]

-1

In sostanza, posso farlo e cosa succede realmente?

public class foo
{
    public int id;

    public void bar()
    {
        //do stuff

        this = null;    // ?
        //do stuff
        foo[] all = otherclass.FindAllFoos();
        foreach(foo f in all)
        {
            if(f.id == 42)
            {
                this = f;    // ?
                break;
            }
        }

        //do stuff
    }
};

Alcuni sfondi specifici che non dovrebbero avere importanza:

Il vero progetto ha una classe che rappresenta un dispositivo USB con cui sto attualmente parlando e, appena prima di questo punto nel programma, dico al dispositivo di riavviarsi. Quando il dispositivo torna, sembra abbastanza diverso da invalidare questa istanza, quindi devo trovarlo di nuovo tra tutti i dispositivi collegati e continuare a parlarci.

    
posta AaronD 26.09.2014 - 17:29
fonte

2 risposte

0

In C #, non è possibile impostare un'istanza impostata su null. this = null; non funzionerà. Le funzioni e i dati definiti all'interno di una classe "live" in quell'istanza di classi. Se l'istanza viene distrutta, tutto ciò che è associato viene distrutto.

Il metodo bar() deve essere spostato in una classe diversa e modificare le classi foo . Ad esempio:

public class FooManipulator
{
    private Foo _myFoo;

    public void bar()
    {
        var allTheFoos = otherClass.FindAllFoos();
        foreach(foo f in all)
        {
            if(f.id == 42)
            {
                this._myFoo = f;
                break;
            }
         }
    }
}
    
risposta data 26.09.2014 - 17:51
fonte
0

this=null

Non puoi assegnare a this , è letto solo per le classi.

Puoi assegnare a this per una struct, ma poi una struct non può essere nullo perché è un tipo di valore.

Prova a inserirlo in un IDE ?

    
risposta data 26.09.2014 - 17:59
fonte

Leggi altre domande sui tag