Nous soaps que la chaîne est un type de référence, nous avons donc
ssortingng s="God is great!";
mais sur la même note si je déclare la classe say Employee qui est un type de référence, alors pourquoi un morceau de code ci-dessous ne fonctionne pas?
Employee e = "Saurabh";
2- Comment déterminer si un type est un type de référence ou un type de valeur?
Ce code fonctionnerait si vous aviez une conversion implicite d’une chaîne en Employee
. Fondamentalement, un littéral de chaîne est de type ssortingng
– c’est-à-dire que sa valeur est une référence de chaîne (et une interné en plus). Vous ne pouvez affecter une valeur d’un type à une variable d’un autre type s’il existe une conversion entre les deux types – définie par l’utilisateur ou intégrée. Dans ce cas, il n’y a pas de conversion de ssortingng
en Employee
, d’où l’erreur.
Contrairement à d’autres réponses, les types ne doivent pas nécessairement être identiques . Par exemple, c’est parfait:
object x = "ssortingng literal";
Cela convient car il existe une conversion de référence implicite de ssortingng
en object
. De même, vous pouvez écrire:
XNamespace ns = "some namespace";
car il existe une conversion implicite de chaîne en XNamespace
.
Pour répondre à votre deuxième question: pour savoir si un type dans .NET est un type de valeur ou un type de référence … les types struct
et enum
sont des types de valeur; tout le rest (classe, délégué, interface, tableau) est un type de référence. Cela exclut les types de pointeurs, qui sont un peu différents 🙂
Parce qu’ils ne sont pas du même type, si vous définissez un TypeConverter, cela fonctionnera.
http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx
Les types de référence ne sont pas assignables sauf s’ils sont du même type (c’est ce qu’on appelle le type sécurité). Le premier exemple fonctionne parce que vous affectez un littéral de chaîne à une variable du type System.Ssortingng
. Le second exemple ne fonctionne pas car vous affectez un littéral de chaîne à une variable du type Employee
. Les types doivent correspondre ou être assignables de droite à gauche pour que l’affectation de valeur fonctionne.
Employee e = "Saurabh";
ne fonctionnera pas simplement parce qu’ils sont de types différents.
object x; x = new Employee(); x = "Hello World!";