0
votes

Affectation d'un objet à une propriété d'objet de type

Après beaucoup de regards autour (y compris des questions similaires mais non même), j'espère que ma question aura du sens et que quelqu'un pourrait m'aider à résoudre ce problème.

J'ai de nombreuses classes, dites classa, classb, classc, etc. et ils existe pour des raisons spécifiques. J'ai une autre classe qui est utilisée à des fins de test, ce qui inclut deux propriétés, définie comme suit: p> xxx pré>

mon problème est-ce: j'instécie la classe, c'est-à-dire Test MyTest = nouveau test (); etc et j'ai besoin d'attribuer une classe, disons myResult (contenant des dizaines de propriétés avec des valeurs). P>

Je dois faire (quelque chose comme) ceci: p>

Console.WriteLine(myTest.testDataResult.SomeProperty.ToString());
//18


5 commentaires

Plus de la moitié de ce code est hors de propos de ce que vous essayez de demander ici. Veuillez mettre à jour le message pour inclure seul code nécessaire à Repliquer votre problème afin que nous puissions vous aider. et après de nombreuses choses qui ont été exécutées, une tâche finale renvoie une (des centaines ..) ou des objets Qu'est-ce que cela signifie, je ne vois aucune de ces choses dans le code ...


@ Çöđěxěŕ des excuses, je viens de donner un exemple de ce que j'ai et où j'ai besoin d'aller, si possible. Je n'ai pas d'autre code à ce sujet, essayant de comprendre comment le faire .. Merci de regarder cela , apprécier.


Aucune raison de s'excuser, c'est bien :) J'ai bien peur de ne pas comprendre quelles sont vos intentions ici.


@ Çöđěxěŕŕ a édité la description de la question comme suggérée.


@ Çöđěxěŕ J'ai de nombreuses méthodes renvoyant obj (classes), chacun différent, par exemple, MyClassa, MyObjectB etc. avec des valeurs à l'intérieur. J'essaie d'attribuer toute la classe dans une propriété d'une classe appelée test. La raison est que j'ai essayé de créer des propriétés de type spécifique, c'est-à-dire < objet public myproperty1 {obtenir; ensemble;} , puis objet publicbb myproperty2 {obtenir; ensemble;} etc. mais sont trop différents types de classes (objectsa, b .. etc.), donc je me demandais si je peux déclarer une propriété générique comme objet public myProperty {get; Ensemble;} puis fermez-le (un à la fois bien sûr) un objet que j'ai besoin ...


3 Réponses :


0
votes

Si je comprenais correctement, il me semble que vous mélangez des choses.

Lorsque vous attribuez quelque chose à l'objet, vous dites que vous mettez votre instance dans une boîte qui n'a aucun type exceptionnel. Cela signifie que lorsque vous souhaitez lire cette instance, vous devez d'abord la jeter au type correct afin d'accéder aux propriétés.

Vous devez faire quelque chose comme ceci:

(Someclss () myTest.TestDataresult) .property1

Pour cette raison, vous devriez essayer d'introduire un type, qui pourrait être une interface, pour décrire le jeu minimal de méthodes et de propriétés dont vous avez besoin. Si vous ne pouvez pas, aucun problème, vous devez juste vous lancer. N'oubliez pas que cette dernière approche peut s'écraser au moment de l'exécution si vous choisissez le type incorrect, tandis que celui qui vous permet de repérer des erreurs à l'heure de la compilation.


2 commentaires

Merci à tous. Pour mettre du sel dans le motif derrière cela: j'ai de nombreuses tâches asynchrones (plus de 80) asynchrones et chacun retourne un objet. En fait, chacun peut renvoyer l'un des nombreux objets et toutes les classes avec des classes liées avec des propriétés. Par exemple, ASYNC Tâche A Retour Objx12 (il y a obj1 à 12) à une instance, et chaque objet a des propriétés différentes (bien que beaucoup soient similaires .. de toute façon). Il est donc extrêmement difficile de créer une classe TestResults avec AAAAll les propriétés, puis en fonction de l'objet de retour (lorsque chaque tâche finira ..) Attribuer les résultats d'Objx ... dans TestResults


Par conséquent, j'ai une classe de testsults assez simple et j'essaie de mettre un objet dans une propriété, si possible, bien sûr (je ne suis pas expert ..), j'enquête donc un moyen de le faire. Toute façon serait suffisante, tant que je peux "atteindre" le nom et la valeur de la propriété d'origine: par exemple, si je pouvais attribuer une autre myobja dans la propriété testtresults.mydata (En supposant que Myobja ait un âge de la propriété) J'espérais pouvoir utiliser testresults.mydata.age etc. J'espère qu'il y a un moyen .. Merci!



0
votes

Je supposerais que le moyen le plus simple de faire est de faire votre classe de test générique: xxx

qui vous permettra d'accéder à toutes les propriétés de vos instances de résultats de tests sans aucune magie noire. .


0 commentaires

0
votes

objet est une classe, comme la plupart des autres. Vous pouvez hériter de cela, instanciez les objets de celui-ci (mais vous ne le faites que rarement), déclarez une variable de son type. Il existe cependant 2 règles spéciales en raison de sa position historique / de conception singulière:

  1. Chaque classe hérite implicitement ou explicitement de l'objet. Si vous définissez aucune base de base, l'objet est appliqué implicitement. Si vous définissez une base de base, vous devez juste revenir assez loin, c'est une chaîne de héritage et vous trouverez un objet. L'objet de type est la racine de chaque héritière de classe.

  2. tandis que des types numériques, des structures et des CO ne hérimentent pas d'objet, ils peuvent être encadrés dans des objets. Il semble très similaire, mais il y a des différences de détails.

    En conséquence, chaque type imaginable de .NET peut être attribué à une variable d'objet de type. C'est donc un objet de toute façon afin que l'héritage prend la relève, ou elle puisse être encadrée d'une. Maintenant, nous n'utilisons plus l'objet comme un type de type. Bien que vous puissiez attribuer quelque chose à l'objet, vous perdez les chèques de type d'heure de la compilation tout en le faisant. Et c'est une chose très importante à perdre. Je ne le sacrifierais jamais, si je peux l'aider.

    Generics vs objet

    Utiliser l'objet Comme le type est tombé de la faveur des génériques. Énoncé de verrouillage est l'un des Les rares cas où vous créez toujours une variable d'objet de type et crée explicitement une norme d'objet. Vous trouverez l'objet Type utilisé pour l'expéditeur dans les gestionnaires d'événements (ceci est une convétion de 50%, 50% d'utilité). À peu près partout, nous utilisons des génériques.

    Les génériques ont été ajoutés au cadre et à la langue spécifiquement pour éviter de devoir recourir à ce type de type variable. Et j'ai choisi "Resort to" très intentionnellement. Les collections génériques telles que Liste , file d'attente et Dictionnaire ont remplacé les pré-génériques comme la file d'attente, Hashtable et wheever nous avons utilisé au lieu de la liste.

    Nous ne pouvons pas vraiment comprendre ce que votre objectif est. Cependant, cela sonne beaucoup comme un problème XY, simplement parce que l'utilisation de l'objet comme type variable en fait partie.


2 commentaires

J'apprécie! Je vais devoir faire des travaux de pensée à ce sujet, mais je pense que j'ai compris votre point. J'ai trop de classes différentes qui sont différentes. Je cherchais donc à «assigner» la collection de propriétés de toute classe dont j'ai besoin pour une propriété de tri «générique». Veuillez noter que chaque classe a des classes liées, donc j'aurais besoin de mois pour passer à travers une manière plus simple. Imagine Classa (avec x propriétés, sur ces propriétés Y sont de type Classb, etc.) et il y a des valeurs dans beaucoup de ces propriétés. J'ai donc besoin d'un moyen de "les mettre" comme classa dans une propriété ..


@Nick ça sonne donc comme une classe normale ennuyeuse. Les instances de classe ont généralement un tas de champs ou de propriétés de types différents. De même manière, ils ont une fonction avec différents types d'arguments et de valeurs de retour. | Si c'est une négation 1: N appelle généralement à un Classb [] , Liste ou une collection similaire.