Vra

Ek het die volgende kode:

CustomerService service;
public CustomerService Service
{
    get
    {
        if (this.service == null)
        {
            this.service = new CustomerService();
        }
        return this.service;
    }
}

public DataTable GetCustomers()
{
    return this.Service.GetCustomers();
}

Die vraag is nou: as ek skryf die bogenoemde metode soos volg (sonder "hierdie"), is dit gee my 'n fout. Instansie is nie verwysing na 'n voorwerp

public DataTable GetCustomers()
{
    return Service.GetCustomers(); // this will spell the error "instance is not reference to an object"
}

Is daar iemand weet? ook dit gebeur net terwyl hy loop via IIS en nie uit Casini webbediener (VS 2010).

Was dit nuttig?

Oplossing

Die teenwoordigheid of afwesigheid van this kan die fout wat jy getuig nie verduidelik. In hierdie situasie beteken dat hulle presies dieselfde ding en sal saam te stel om dieselfde IL kode. Kyk op die vergadering met behulp NET Reflector om dit te verifieer as jy wil. Die fout is wat plaasvind na willekeur, waarskynlik as gevolg van 'n ras toestand.

Een ding wat ek kan dadelik sien is dat as jy hierdie kode van verskeie drade loop dan lyk dit soos jy 'n wedloop toestand hier:

if (this.service == null)
{
    this.service = new CustomerService();
}
return this.service;

In die multi geval jy nodig sou wees om anders te sluit wat jy kan twee Klantenservice voorwerpe te kry. Ek is nie seker of dit verduidelik jou fout, maar dit kan beslis verwarring skep. Race voorwaardes kan voorkom in een omgewing, maar nie in 'n ander as die frekwensie van die fout kan afhang van die tipe van die hardeware en op watter ander prosesse wat uitgevoer word op die bediener.

U kan ook 'n ander ras voorwaardes in die kode wat jy nie het gepos . Moenie hierdie lui inisialisering tegniek sonder sluit tensy jy seker dat jy net een draad.

Ander wenke

Jy het waarskynlik 'n naam konflik met 'n ander "diens" (klas of naamruimte). Die gebruik van this los dit.

Ek is 'n bietjie skepties oor die verskil tussen Cassinin en IIS, het jy noukeurig nagegaan word dat?

Iets soos hierdie moet wees in 'n Singleton . Wat baie kwessies soos threading indien dit korrek geïmplementeer sal oplos en sou die implementering en leesbaarheid van die kode veel beter maak.

Dankie Blake Niemyjski (.netTiers spanlid)

Ek vroetel 'n bietjie met jou kode in Visual Studio en ek kon nie eens 'n naam konflik om die fout boodskap wat jy beskryf produseer. Ek kan nie dink aan enige saak waarin "this.X" kan ooit anders as "X" behalwe wanneer "X" te wees is 'n plaaslike veranderlike of 'n metode parameter .

het die CustomerService klas put uit 'n basis klas genoem Service? As dit so is, dan is dit die probleem.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top