2010-10-13 5 views
1

Je viens d'un assembleur et d'un arrière-plan C/C++, donc je comprends le concept derrière les types de référence par rapport aux types de valeur dans vb.net. En outre, j'ai lu Jon Skeet's article concernant les références et les types de valeur et je comprends tout cela.Déterminer si un type est un type de référence ou un type de valeur

Ma question est: Comment pouvez-vous dire si un type donné est un type de référence ou un type de valeur?

Est-ce simplement que tous les types entiers (ints, flottants, etc.) sont des types de valeur et que toutes les classes sont des types de référence? (Si oui, où les chaînes tombent?)


Question 2 (liée): Est-il possible de déclarer une classe comme une classe de valeur par rapport à une classe de référence? Par exemple (en utilisant une extrême brièveté):

Public Class MyClass1 
    Public Value As Integer 
End Class 

En utilisant cette classe:

Dim test1 As New MyClass1 
    test1.Value = 1 

    Dim test2 As MyClass1 
    test2 = test1 
    test2.Value = 2 

A la fin de ce code, la valeur est 2. Il est clair que Test1, MyClass1 est un type de référence. Mais, qu'est-ce qui le fait être tel et pas un type de valeur?

Répondre

3

En général, les énumérations et les structures sont value types, les classes interfaces et les délégués sont reference types. Comme pour déclarer une classe comme type de valeur - ce n'est pas possible, mais les structures C# sont très proches des classes et sont des types de valeur.

Comme pour VB.NET, je crois que l'équivalent est la déclaration Structure:

L'instruction structure définit un type de valeur composite que vous pouvez personnaliser.

+0

Merci beaucoup! J'ai eu du mal à comprendre cela pendant un moment. Les liens MSDN aident beaucoup. – Richard

+0

Bonne réponse. Les structures dans VB.net peuvent également contenir du code, btw. Ils ne peuvent tout simplement pas enregistrer l'état – DarinH

Questions connexes