certains types simples comme int, string, .... sont faciles à réaliser qu'ils sont ValueTypes ou RefrenceTypes. Mais je veux savoir s'il y a un moyen de distinguer?Comment faire pour distinguer qu'un type est ValueType ou RefereceType?
Répondre
Tous les structs, enums et types natifs sont des types de valeurs.
Lors de l'exécution, vous pouvez vérifier comme ceci:
Type type = typeof(TypeName);
if (type.IsValueType)
{
//...
}
Seulement dans le monde .net. –
Très bon point :-) –
Les chaînes ne sont pas des types de valeur.
Voici une liste des plus couramment utilisés value types:
- bool (System.Boolean)
- octet (System.Byte)
- char (System.Char)
- décimal (System.Decimal)
- double (System.Double)
- flotteur (System.Single)
- int (System.Int32)
- longue (System.Int64)
- sbyte (System.SByte)
- court (System.Int16)
- uint (System.UInt32)
- ulong (système. UInt64)
- ushort (System.UInt16)
- System.DateTime
Outre ceux-ci:
- Tout type qui est un ENUM
- Tout type qui est un struct
Tous les autres types sont des types de référence.
En lisant votre commentaire, DateTime est un type de valeur. Alors qu'est-ce que ça veut dire? DateTime dt = new DateTime Merci – odiseh
Je pense que vous confondez les types valeur/référence avec le fait que certains types contiennent ou non des littéraux. Les chaînes ont des littéraux de chaîne qui peuvent être utilisés pour les initialiser, mais ce ne sont pas des types de valeurs. DateTime n'a pas de littéraux, mais est un type de valeur. Cela signifie que lorsque vous passez un DateTime en tant que paramètre à une fonction ou que vous écrivez DateTime datetime1 = datetime2, la valeur est réellement copiée au lieu que les deux datetime se réfèrent au même objet. –
Ce que Tal a dit est totalement juste. Le choix de ce qui obtient ou non des littéraux est totalement à la hauteur de la langue. Ce qui est et ce qui n'est pas un type de valeur est défini par le CLI lui-même. Par exemple, VB a des littéraux DateTime. On peut aussi avoir des littéraux de liste ou de hachage (boo, IronPython, IronRuby), et ce sont toujours des types de références. –
- 1. Collecte des ordures ménagères pour ValueType enrubanneuse
- 2. Outlook MailItem: Comment distinguer si le courrier est entrant ou sortant?
- 3. C# datagridview valuetype avec la gamme
- 4. Distinguer un tuyau d'un fichier dans Windows
- 5. Comment faire pour supprimer Type Erasure en Java
- 6. Comment faire pour émettre une expression déléguée ou lambda
- 7. Nhibernate ValueType Collection en tant que chaîne délimitée dans DB
- 8. terminologie pour distinguer les langues qui peuvent/ne peuvent pas faire référence à la mémoire indéfinie
- 9. pour insérer() ou pour faire du nouveau
- 10. Comment faire pour afficher le type d'erreur dans ruby?
- 11. asp.net mvc - Route pour chaîne ou int (ie/type/23 ou/type/chapeaux)
- 12. L'installateur doit distinguer Vista et XP
- 13. comment faire correspondre ce type de construction?
- 14. Comment distinguer $ _ dans les opérateurs de liste imbriqués dans Perl?
- 15. Comment distinguer un fichier d'un répertoire en Perl?
- 16. Comment faire pour définir CommandTimeout ou ConnectionTimeout dans NetTiers?
- 17. Comment puis-je obtenir C# pour distinguer les noms de classe ambigus?
- 18. Comment faire pour boucler ou wget une page Web?
- 19. Comment faire pour que AccessKey ou AcceleratorKey fonctionne dans Silverlight?
- 20. Macro pour tester si un type entier est signé ou non
- 21. JRuby/Windows et les extensions (natives) comment les distinguer?
- 22. PHP Comment distinguer $ ce pointeur dans la chaîne d'héritage?
- 23. Comment savoir (runtime) si un type dans t-sql est de longueur fixe ou non?
- 24. Comment faire pour que StructureMap renvoie une instance spécifique pour un type demandé
- 25. comment faire subonic convertir une chaîne à mon personnalisé Type
- 26. Comment détecter si le type est un autre type générique
- 27. Comment détecter si un Type est un DynamicProxy généré sans faire référence à Castle DynamicProxy?
- 28. Comment faire pour envoyer plusieurs "ensembles d'enregistrements" d'un formulaire HTML à JSP ou une servlet Java?
- 29. Comment faire pour mapper un type de données oracle SYS.XMLTYPE dans Nhiberbate
- 30. Comment faire pour déterminer si l'association Rails est surchargée?
Cela dépend entièrement de votre langue/runtime. –
Bien noté. Je suppose que c'est une question .NET/C#. Ai-je raison? –
@ Martinho: exactement vous avez raison. – odiseh