Givens:Impossible d'accéder à la propriété imbriquée de tableau de classe statique
- La classe doit être accessible à l'intérieur une autre classe qui doit être statique (pas le choix).
- La classe FOO doit être récursif prenant en charge un tableau imbriqué d'une collection d'éléments étant donné la structure de l'exemple.
- FOO doit être sérialisable dans son intégralité, y compris tous les tableaux imbriqués et les éléments suivants inclus dans XML (sans utiliser les astuces - juste sérialiser directement en xml qui semble ne prendre en charge qu'une seule classe et rechercher automatiquement les classes/structures imbriquées)
le problème est que je ne peux pas faire comme suit les propriétés de FOOTabItem ne sont pas accessibles.
// can not be static
public class TestClass : SomeFancyInheritedObject {
// must be static
public static void Test() {
FOO.FOOTabItem bar = new FOOTabItem();
bar.Count = 100; // This is inaccessible
}
}
C'est le code de classe que je ne parviens pas à faire les objets exposés de:
public static class FOO {
public static int Money { get; set; }
public static List<FOOTab> Tabs { get; set; }
public static struct FOOTab {
public static List<FOOTabItem> Items { get; set; }
public static FOOTab TabInformation { get; set; }
}
public static struct FOOTabItem {
public static ItemInfo Item { get; set; }
public static int Count { get; set; }
}
public static FOO() {
Tabs = new List<FOOTab>();
Money = 0;
}
}
J'ai aussi essayé d'utiliser des classes imbriquées au lieu de struct
dans FOO, mais cela a donné lieu à FOO se plaindre que je ne peut pas utiliser une classe en tant que paramètre d'objet, c'est pourquoi j'utilise struct
à la place.
Il n'y a aucune erreur de syntaxe avec ce code. Je peux exposer les propriétés/etc de FOO lui-même et instancier new()
des structures, mais je ne peux pas voir les propriétés des structures.
Je crois que c'est probablement un problème d'autorisations (public/statique/interne/etc), mais je ne sais pas exactement quoi faire pour corriger cela. J'ai recherché SO et il y a des problèmes semblables dans la nature cependant ils n'offrent aucune perspicacité claire au sujet des listes imbriquées d'objets dans les classes statiques et comment les accéder correctement à partir d'autres classes statiques.
Vous avez beaucoup de problèmes dans votre code. Pourquoi TestClass.Test() doit-il être statique? Pourquoi les structures statiques FOOTab et FooTabItem? Dans TestClass.Test() vous essayez de créer une nouvelle instance de FOO.FOOTabItem(), vous ne pouvez pas instancier une classe statique. – KiwiPiet
Donnera la courte explication. TestClass.Test() est un remplacement statique et doit être dû à la façon dont le développeur a écrit la méthode réelle dont il hérite. J'ai obscurci et utilisé 'Test' et 'Foo' et 'Bar' pour une représentation plus classique du problème. En outre, j'ai trouvé pourquoi les propriétés des structures n'étaient pas exposées parce que même si la structure doit être 'statique' pour être visible dans les méthodes statiques, les propriétés ne devraient pas avoir de 'statique' car cela empêche l'exposition. –
En outre, si downvoting est une fonctionnalité fantastique, si vous votez en baisse simplement parce que vous ne pouvez pas comprendre ou n'aimez pas ce que vous voyez qui montre vraiment la maturité et est contre-productif de ce que la fonctionnalité est réellement là pour. Ce n'est pas une option semblable/non aimante. C'est un vote sur la qualité de la recherche et la clarté de la question. –