Comment trouver la taille d'une classe en C #
public class A
{
int x;
float y;
}
Comment trouver la taille de la classe en C#.
Est-il un opérateur comme Sizeof(), qui sert à être en C++
source d'informationauteur Sunil
Vous devez vous connecter pour publier un commentaire.
Réponse courte:
Vous ne.
Réponse longue:
Vous ne pouvez le faire que si vous tapez une disposition fixe et n'a pas réussi membres. Les structures sont fixés par défaut. Les Classes peuvent attribuée à avoir une disposition fixe.
(Je ne suis pas en montrant comment, tant que vous n'avez vraiment pas besoin. Il est seulement important quand on fait de l'interopérabilité.)
Suivants vous donnent la taille de la classe C#:
Souvenez-vous de la taille d'une classe dépend de rembourrage.
Vous pourriez sérialiser la classe dans un flux de mémoire et ensuite obtenir la taille à partir de là, mais je ne serais pas vraiment recommandé, à moins que vous avez eu.
Si vous utilisez le
sizeof
opérateur, vous obtiendrez la taille du pointeur (qui sera le même pour tous les objets, évidemment).Vous pouvez écrire votre propre méthode et iterate (à l'aide de réflexion) sur tous les membres de l'objet (ou ceux qui vous intéressent) et ajouter la taille de chaque membre.
La partie la plus délicate sera en mesure de déterminer la taille de membres qui ne sont pas des types natifs... votre méthode devait être un peu "récursif".
Si vous étiez à mettre en œuvre l'idée ci-dessus, vous auriez la taille approximative de l'objet.
La plupart des solutions sont grands et fonctionnent bien, mais ils ont la restriction que votre classe doit être sérialisable (pour plus de détails, voir: https://docs.microsoft.com/en-us/dotnet/standard/serialization/basic-serialization)
Toutefois, si vous avez de la classe n'est pas sérialisable ensuite le code suivant peut être utile.
Ce code prend en considération le fait que l'utilisation d'un champ de référence n'est pas libre, il ajoute des frais généraux.
Il considère aussi en utilisant une taille moyenne pour les chaînes de sorte que vous obtenez une meilleure approximation.