Gépelt: Márka osztály belsejében látható a modul csak

szavazat
9

Vessünk egy pillantást az alábbi kódot:

module MyModule {
    class MyPrivateClass {
        ...
    }

    export class MyPublicClass {
        private var: MyPrivateClass; // MyPrivateClass is unknown
    }
}

Szeretnék MyPrivateClass , hogy csak látható legyen MyModule , kifejezetten belső használatra MyPublicClass . Kívül MyModule csak MyPublicClass láthatónak kell lennie. Rájöttem, hogy a fenti elrendezés kell csinálni, de azt kifogásolja, hogy a VS MyPrivateClass nem látható benne MyPublicClass . Hozzáadása előtt kivitelre meghatározása MyPrivateClass teszi láthatóvá MyPublicClass de aztán ez is látható kívülről.

Van egy módja annak, hogy láthatóvá tegye MyPublicClass így csak?

Köszönöm.

A kérdést 08/10/2012 13:28
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
7

Itt egy működő példa, amely bemutatja a saját osztály, a public class, a privát osztályú nyilvános osztályból és megpróbálja használni a saját osztály, ami hibát generál.

Ha még mindig hibaüzenetet kap, Ön tudja, hogy hozzák nyilvánosságra a nevét próbál használni a modult, amely okozza a problémát?

module MyModule {
    class MyPrivateClass {
        doSomething() {
            return 1;
        }
    }

    export class MyPublicClass {
        private x = new MyPrivateClass();

        someFunction() {
            return this.x.doSomething();
        }
    }
}

var examplePublic = new MyModule.MyPublicClass();
var result = examplePublic.someFunction(); // 1

var examplePrivate = new MyModule.MyPrivateClass(); // error
Válaszolt 12/10/2012 17:32
a forrás felhasználó

szavazat
2

Ha azt szeretnénk, hogy legyen saját, a emmitted JavaScript, akkor ezt azáltal, hogy a magán-CLAS fokon a modul belsejében, de nem oldalán az exportált osztályban.

module MyModule {
    class MyPrivateClass {
        prop1: number = 1;
    }

    var foo: MyPrivateClass = new MyPrivateClass();

    export class MyPublicClass {
        someMethod(){
            var bar = foo.prop1;
        }
    }
}

var x = new MyModule.MyPublicClass();
Válaszolt 03/01/2013 17:39
a forrás felhasználó

szavazat
0

Azt mondta, az egyik meg észrevételeit:

Ez furcsa: Ha én be a kódot a fenti (a tiéd, vagy az enyém), akkor rendben van. De amint azt változtatni a nevét, a modul a valódi nevét, a hiba leírtam megjelenik

Ez úgy hangzik, nagyon hasonlít a probléma, amit tapasztalt. Ez okozta, mert én már különféle referencia utak importálja a modulokat. Ennek eredményeként belsejében egy modult tagjai nem tudta elérni egymást.

Sajnálom, de nem emlékszem semmilyen további részleteket, és már nem volt képes reprodukálni saját (vagy én) hibát. Ez valószínűleg használhatatlan, de azt gondoltam, megosztom a tapasztalatom ellenére: Keverés referencia utak és modulok látszik okozhat nagyon furcsa hibákat.

Sőt néha VisualStudio viselkedik inkább furcsa. Én jelenleg is dolgozik egy géppel projekt egy barátommal együtt. A kód van tárolva GitHub repo. Mindketten húzta ugyanazon verzióját. Dolgoztam jó nekem, és meghintjük hibaüzenetek neki. Ugyanaz az operációs rendszer, azonos változatát géppel, ugyanazon verzióját VisualStudio ... Érdekes a hiba kapcsolódó modulok is. Egy modul, amely importálta úgy tűnt, hogy „üres”. Minden kód, amely megpróbálta használni a tartalom ezen modul pirossal jelölt. Ő újraindul VisualStudio és hirtelen, a kód fogadták el érvényesnek. Mi nem változott semmit! Ez összeállított probléma nélkül is.

Válaszolt 19/01/2013 13:15
a forrás felhasználó

szavazat
0

Hmm, nem látok semmilyen problémát, de ne felejtsük el, hogy inicializálja a mező értékét, különben a fordító nem generál területén:

module MyModule {
    class MyPrivateClass {

    }

    export class MyPublicClass {
        private instance: MyPrivateClass; // MyPrivateClass is unknown
        constructor() {
           this.instance = new MyPrivateClass();
        }
    }
}
Válaszolt 08/10/2012 13:40
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more