Lorsque vous compilez un ensemble VB.NET, il comprend certains types « d'aide » supplémentaires. Utilisez Reflector pour voir votre assembly compilé pour voir ce que je veux dire.
Je suis sûr que vous trouverez que le seul assemblage avec des différences est celui que vous utilisez pour faire la réflexion - c.-à-d. Celui qui est construit avec C# ou VB.NET, en fonction de votre scénario.
EDIT: Cela dépend exactement de la façon dont vous définissez vos classes.
Cependant, encore une fois c'est seulement pertinentes du code en cours de compilation par le compilateur C# ou VB. Lorsque vous appelez GetExportedTypes
, peu importe la langue d'où vous appelez. Vous êtes confus par le fait que vous n'écrivez que le nombre total. Voici deux programmes courts mais complets pour montrer la différence:
C#
using System;
using System.Reflection;
public class ShowTypeCounts
{
static void Main()
{
AppDomain domain = AppDomain.CurrentDomain;
foreach (Assembly assembly in domain.GetAssemblies())
{
Console.WriteLine("{0}: {1}",
assembly.GetName().Name,
assembly.GetExportedTypes().Length);
}
}
}
Résultats:
mscorlib: 1282
ShowTypeCounts: 1
VB
Imports System
Imports System.Reflection
Public Module ShowCounts
Sub Main()
Dim domain As AppDomain = AppDomain.CurrentDomain
For Each assembly As Assembly in domain.GetAssemblies
Console.WriteLine("{0}: {1}", _
assembly.GetName.Name, _
assembly.GetExportedTypes.Length)
Next
End Sub
End Module
Résultats:
mscorlib: 1282
ShowTypeCounts: 1
Comme vous pouvez le voir, les résultats sont les mêmes - mais si vous supprimez « public » soit de morceau de code, les ShowTypeCounts résultat va à 0. Ce n'est pas une différence de la façon dont fonctionne GetExportedTypes entre les langues - Cela dépend uniquement des types que vous exportez réellement. Je suppose que dans vos applications de console, l'un avait un type public et l'autre pas.
Qu'entendez-vous par "différent"? Vous réfléchissez à la même assemblée? –
Veuillez donner un exemple complet de ce que vous voulez dire. –
Par exemple: Ces deux donnent des résultats différents C# - var v = de a dans AppDomain.CurrentDomain.GetAssemblies() de b dans a.GetExportedTypes() select b; v.Count(); VB.nET - Dim v = D'un dans AppDomain.CurrentDomain.GetAssemblies(), b Dans a.GetExportedTypes() Sélectionnez b v.Count() –