6
votes

Puis-je appeler une fonction définie dans une classe partielle d'une autre classe partielle. Est-il possible?

J'ai créé deux classes partielles pour une page Web.

Maintenant, j'ai donné une définition d'une fonction Selon Soumettre () que j'appelle à ONSUBMIT Event of Button.

Mais cette fonction n'est pas appelée, le programme ne compile pas car il n'est pas en mesure de rechercher la définition de la fonction, définie dans une autre classe partielle. Est-il possible d'appeler cette fonction ou je dois donner une définition de la fonction dans le même fichier dans laquelle je l'appelle

par exemple par exemple xxx

inscription.aspx.cs xxx

enregistrement_database.cs xxx

Je reçois la suite d'erreur xxx

inscription.aspx, enregistrement.aspx.cs, enregistrement_database.cs sont trois fichiers non dans le dossier App_code mais appartiennent à un dossier uniquement sur lequel inscrivez-vous.aspx.cs, enregistrement_database.cs sont des classes partielles et des inscriptions. est mon fichier de conception. PLZ Permettez-moi savoir si vous voulez savoir d'autres informations sur mon problème

Je n'utilise pas les fichiers DLL. Pas de code précompilé


5 commentaires

Toutes les réponses représentent la même chose, mais j'aimerais savoir comment puis-je voir mon espace de noms. Aucun espace de noms n'est visible pour moi dans le code de page


Avez-vous ces deux classes dans la même assemblée (DLL) sous la même espace de noms ...? Les classes partielles ne servent pas de wok sur différents assemblys et dans différents espaces de noms ...


Je ne suis pas capable de vérifier si elles se trouvent tous deux dans la même assemblée ou l'espace de noms ou non. Comment puis-je vérifier cela


L'erreur que vous obtenez est qu'il n'y a pas de méthode de soumission, qui n'est dans aucun du code que vous nous montrez.


J'ai également écrit cette ligne à la fin de la question "envisagez de soumettre en tant que fonction d'affichage ici pour cela par exemple" Voir ce PLZ


5 Réponses :


1
votes

Bien sûr que vous pouvez. Comme toutes les autres méthodes d'une classe (partielle ou non), vous appelez des méthodes statiques par classeName.Methodname () ou non statique comme une instance de classe et appelez INSTANCENAME.METHODNAME ()

Edit: Désolé, je n'ai pas vu vos exemples au début.

cela devrait fonctionner. La classe partielle est divisée dans des fichiers mais il est compilé comme une classe. Donc, la deuxième partie de la même classe partielle peut accéder aux membres privés définis dans l'autre sans problèmes.


1 commentaires

J'essaie de le faire, mais cette définition de fonction ne se met pas disponible à mon bouton Cliquez sur l'événement. Qu'est-ce qui manquerait?



1
votes

Oui, il est possible d'appeler une méthode sur une classe (partielle).

Les classes partielles ne sont qu'une caractéristique de certaines langues (telles que c #) - elles n'existent pas en IL, car elles sont compilées ensemble dans une seule classe. P>

Cependant, il peut parfois être délicat puisque les déclarations de classe partielle doivent être totalement identiques à cette fusion. Que inclut l'espace de noms em>, cela pourrait donc être votre problème. P>

Comme illustration, cela entraînera une seule classe: P>

namespace MyNamespace
{
    public partial class MyClass
    {
        public void MyMethod();
    }
}

namespace MyOtherNamespace
{
    public partial class MyClass { }
}


3 commentaires

Je n'ai pas été capable de vérifier ma page que dans quel espace de nom est-il. Comment puis-je le vérifier.


S'il n'y a pas de déclaration de noms de la déclaration dans votre code source, la classe est probablement définie dans l'espace de noms «global». Vous pouvez vérifier cela en examinant l'IL résultant dans le réflecteur.


Il y a un espace de noms. Je comprends pourquoi cela ne fonctionne pas, j'essaie de canard en caoutchouc un travail autour de



1
votes

Si je comprends votre question correctement, vous avez deux fichiers contenant des définitions de classe partielle pour la même classe. Droit? Ils ne sont pas deux classes différentes?

Si les deux fichiers sont pour la même classe, vous devez vous assurer qu'ils sont tous deux définis dans le même espace de nom et que les noms de classe sont orthographiés exactement de la même manière. Si les noms correspondent, cela devrait fonctionner.

Si vos classes partielles définissent deux classes différentes, les mêmes règles s'appliquent que pour les classes ordinaires. Pour faire référence à un métod d'une autre classe, la méthode doit être publique et vous avez besoin d'une référence à une instance de cette classe ou que la méthode doit être statique.


1 commentaires

CS0757 Une méthode partielle peut ne pas avoir de déclarations de mise en œuvre multiples



1
votes

Cela devrait aller bien. Si vous voulez, vous pouvez formaliser les choses en utilisant des méthodes partielles; Déclarez le talon partiel dans un fichier et mettez-le dans l'autre. Cela identifiera rapidement si vous avez deux classes ou une, et mettra en évidence des tentatives visant à mettre en œuvre une méthode partielle non définie: xxx

Notez que partiel méthodes doit être non public et ne peut pas avoir out ou des types de retour non vides.


0 commentaires

5
votes

Je pense que le problème que vous rencontrez est que votre site Web est compilé de manière dynamique , plutôt qu'une application Web précompilée.

Lorsque la page ASP.NET est d'abord accessible, le compilateur n'aura que regarder dans le code derrière le fichier et ne recherchera pas tous les autres fichiers .cs pour une éventuelle supplémentaire. code pour la même classe. Ainsi, il ne verrara jamais la mise en œuvre de affichage () , ce qui, à son tour, provoque l'échec du fichier à compiler.

Je n'utiliserais certainement pas une méthode comme celle-ci pour Ce que vous semblez vouloir faire, mais vous pouvez définir une classe personnalisée qui dérive de system.web.ui.page et que votre page réelle dérive de la nouvelle classe. La définition de la classe devrait être dans app_code pour un site Web compilé de manière dynamique.

enregistrement.aspx.cs: xxx

App_code \ mypage.cs: xxx

Dans tous les cas: vous ne devez certainement pas utiliser de variables statiques comme vous les utilisez, cela entraînera des problèmes si plusieurs personnes utilisent votre site en même temps. Franchement, votre exemple n'a pas beaucoup de sens pour moi. Peut-être que si nous avions plus d'informations sur ce que vous essayez d'accomplir, nous pourrions fournir une meilleure façon de le faire.

Notez que dans votre exemple, mettez le deuxième fichier dans app_code < / code> le répertoire ne le fera pas fonctionner. Cela entraînerait simplement deux classes avec le même nom de classe (à condition que les espaces de noms correspondent bien sûr). Cela n'aime vraiment pas ça:)


5 commentaires

Je pense que vous allez dans la bonne direction. Pouvez-vous élaborer plus sur ceci. "Compilé dynamiquement, plutôt qu'une application Web précompilée."


Déploiement des fichiers .cs avec les fichiers .aspx sur le serveur Web = compilé de manière dynamique, vs. Déploiement d'un ou plusieurs assemblys contenant tout le code derrière = précompilé.


Détails ajoutés à la question, PLZ m'aider.


Vous ne pouvez pas utiliser plus d'un code derrière le fichier contenant des classes partielles avec une compilation dynamique, vous devrez donc l'utiliser d'une autre manière. Je ne suis toujours pas sûr de ce que vous essayez d'accomplir cependant. Pourquoi définissez-vous une variable dans un fichier et utilisez-vous dans une autre? Cela vient juste obscurcir votre code sans aucun but réel. Il me semble que votre Soumettre () devrait renvoyer un objet contenant le prénom, le nom de famille, etc.


Soumettre ne me rendrait rien. Il va simplement insérer des données dans la base de données. Maintenant, j'ai comment travailler. Thx pour votre suggestion. Marquage de votre réponse à 200% correct car il résout réellement tout l'aspect pouvant survenir dans un tel problème avec une solution complète. Thx 1ce encore +100 pour répondre