Plus précisément, en ce qui concerne le champ d'initialiseurs (dans ce cas, statique) - §17.11 dans ECMA 334:
Si une classe contient des champs statiques avec des initialiseurs, ceux des initialiseurs sont exécutés dans l'ordre textuel immédiatement avant l'exécution du constructeur statique.
Maintenant, si nous avons des partial
classes dans des fichiers séparés, est que l'ordre déterminé n'importe où? Mon petit doigt me dit "pas formellement défini, mais probablement liés à la commande inclus dans le csproj, ou l'ordre indiqué à la scc". Est-ce correct?
(et oui, je me rends compte qu'il serait préférable d'éviter l'ambiguïté complètement - sans doute par le déplacement de toutes l'initialisation d'un constructeur statique).
Par exemple, si j'ai a.cs
:
using System;
partial class Program
{
private static int Foo = Write("Foo");
static int Write(string name)
{
Console.WriteLine(name);
return 0;
}
static void Main()
{
Console.WriteLine("[press any key]");
Console.ReadLine();
}
}
et b.cs
:
partial class Program
{
private static int Bar = Write("Bar");
}
et:
<Compile Include="a.cs" />
<Compile Include="b.cs" />
puis c'est l' Foo
alors Bar
; toutefois, si ce n'est:
<Compile Include="b.cs" />
<Compile Include="a.cs" />
puis il est Bar
alors Foo
. Cela prend en charge l'observation, mais ne prend pas en état fortement. §8.7.13 (Partielle déclarations de type) ne fait aucun commentaire sur le bon de commande lors de la combinaison de partial
les classes. Donc; est-il rien de plus fort, nous pouvons dire ici, que ce soit à partir du langage C# spec ou de l'outillage de la documentation?
En outre, il se comporte de la même façon avec csc a.cs b.cs
vs csc b.cs a.cs
.