Γραφομηχανή: κάνει τάξης ορατή στο εσωτερικό της μονάδας μόνο

ψήφοι
9

Ρίξτε μια ματιά στην παρακάτω κώδικα:

module MyModule {
    class MyPrivateClass {
        ...
    }

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

Θέλω MyPrivateClass να είναι ορατή μόνο μέσα mymodule , ειδικά για εσωτερική χρήση σε MyPublicClass . Έξω mymodule , μόνο MyPublicClass πρέπει να είναι ορατά. Σκέφτηκα ότι η παραπάνω διάταξη πρέπει να κάνουμε, αλλά VS καταγγέλλει ότι MyPrivateClass δεν είναι ορατή στο εσωτερικό MyPublicClass . Η προσθήκη των εξαγωγών πριν από τον ορισμό της MyPrivateClass καθιστά ορατό σε MyPublicClass αλλά τότε είναι επίσης ορατό από το εξωτερικό.

Είναι ένας τρόπος για να γίνει ορατό εκεί MyPublicClass μόνο;

Ευχαριστώ.

Δημοσιεύθηκε 08/10/2012 στις 13:28
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
7

Εδώ είναι ένα πραγματικό παράδειγμα, που δείχνει την ιδιωτική τάξη, τη δημόσια τάξη, χρησιμοποιώντας το ιδιωτικό τάξης από το δημόσιο τάξη και προσπαθούν να χρησιμοποιήσουν τον ιδιωτικό τάξη, η οποία δημιουργεί ένα σφάλμα.

Αν έχετε ακόμα ένα λάθος, είστε σε θέση να αποκαλύψει το όνομα που προσπαθείτε να χρησιμοποιήσετε για τη μονάδα που δημιουργεί το πρόβλημα;

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
Απαντήθηκε 12/10/2012 στις 17:32
πηγή χρήστη

ψήφοι
2

Αν θέλετε να είναι ιδιωτική στην emmitted την Javascript για να μπορείτε να το κάνετε αυτό μετακινώντας το παράδειγμα του ιδιωτικού κατατάσσεται στο εσωτερικό της μονάδας, αλλά όχι στην πλευρά η οποία εξάγονται τάξη.

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();
Απαντήθηκε 03/01/2013 στις 17:39
πηγή χρήστη

ψήφοι
0

Είπατε σε ένα από τα σχόλιά σας:

Είναι περίεργο: Αν επικολλήσετε τον κώδικα όπως παραπάνω (δικό σας ή το δικό μου), είναι μια χαρά. Αλλά μόλις αλλάξω το όνομα της ενότητας για να το πραγματικό της όνομα, το σφάλμα που περιγράφεται εμφανίζεται

Αυτό ακούγεται πολύ παρόμοια με ένα πρόβλημα που έχω βιώσει. Αυτό προκλήθηκε επειδή είχα χρησιμοποιήσει διάφορα μονοπάτια αναφορά στην εισαγωγή των ενοτήτων. Ως αποτέλεσμα μέσα σε μέλη της μονάδας δεν μπορούσαν να έχουν πρόσβαση ο ένας τον άλλον.

Λυπάμαι, αλλά δεν μπορώ να θυμηθώ καμία περισσότερες λεπτομέρειες και δεν ήταν σε θέση να αναπαράγουν (ή μου) λάθος σας. Αυτό είναι μάλλον άχρηστο, αλλά σκέφτηκα ότι θα μοιραστώ την εμπειρία μου, ωστόσο: Ανάμιξη μονοπάτια και μονάδες αναφοράς φαίνεται να προκαλεί πολύ περίεργα λάθη.

Επιπλέον, μερικές φορές VisualStudio συμπεριφέρεται μάλλον περίεργο. Είμαι σήμερα εργάζονται για ένα έργο γραφομηχανή μαζί με έναν φίλο. Ο κωδικός αποθηκεύεται σε ένα repo GitHub. Και οι δύο τράβηξε την ίδια έκδοση. Έχω λειτούργησε καλά για μένα και πασπαλίζονται με μηνύματα λάθους γι 'αυτόν. Το ίδιο λειτουργικό σύστημα, ίδια έκδοση του γραφομηχανή, ίδια έκδοση του VisualStudio, ... Είναι ενδιαφέρον ότι το σφάλμα που σχετίζονται με λειτουργικές μονάδες, πάρα πολύ. Μια μονάδα που εισήχθη φαινόταν να είναι «άδειο». Όλος ο κώδικας που προσπάθησε να χρησιμοποιήσει το περιεχόμενο αυτής της ενότητας σημαδεύτηκε κόκκινο. Αυτός επανεκκίνηση VisualStudio και ξαφνικά, ο κώδικας έγινε δεκτό ως έγκυρο. Δεν αλλάζει τίποτα! Θα συνταχθεί χωρίς προβλήματα, πάρα πολύ.

Απαντήθηκε 19/01/2013 στις 13:15
πηγή χρήστη

ψήφοι
0

Χμμ, δεν βλέπω κανένα προβλήματα με αυτό, αλλά μην ξεχάσετε να προετοιμάσετε την τιμή του πεδίου, αλλιώς ο compiler δεν θα δημιουργήσει το πεδίο:

module MyModule {
    class MyPrivateClass {

    }

    export class MyPublicClass {
        private instance: MyPrivateClass; // MyPrivateClass is unknown
        constructor() {
           this.instance = new MyPrivateClass();
        }
    }
}
Απαντήθηκε 08/10/2012 στις 13:40
πηγή χρήστη

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