Ce code est-il des valeurs de définition via les accessoires peu de temps après la création d'objets

StackOverflow https://stackoverflow.com/questions/6015934

Question

var dlg = new Microsoft.Win32.OpenFileDialog
{
    Title = "Select configuration",
    DefaultExt = ".xml",
    Filter = "XML-file (.xml)|*.xml",
    CheckFileExists = true
};

J'ai obtenu le morceau ci-dessus de GOT de cette Publier. Est la partie à l'intérieur des accolades bouclées attribuant des valeurs via des accessoires. Il ne semble pas y avoir de constructeurs, donc cela implique que celui par défaut est appelé puis les valeurs de propriété attribuées.

Était-ce utile?

La solution

Ce que vous avez montré s'appelle un initialiseur d'objet, une caractéristique syntaxique introduite dans C # 3.0.

Il est similaire au code suivant, qui crée un objet dans la première ligne, puis définit ses propriétés individuellement dans les lignes suivantes:

var dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Title = "Select configuration";
dlg.DefaultExt = ".xml";
dlg.Filter = "XML-file (.xml)|*.xml";
dlg.CheckFileExists = true;

Cependant, il est pas identique au code ci-dessus. Lorsque vous utilisez un initialiseur d'objet, le compilateur créera une variable temporaire, définira les propriétés de l'objet contenu dans cette variable temporaire, puis attribuez cette variable temporaire à la variable réelle que vous avez déclaré. Le résultat net est que la création de l'instance d'objet est atomique. Des informations plus détaillées sont disponibles dans les réponses à cette question, et en Ce billet de blog.

En pratique, vous pouvez imaginer le code qui en résulte ressemble à quelque chose comme ça lorsqu'il est complètement étendu:

var temporaryDlg = new Microsoft.Win32.OpenFileDialog();
temporaryDlg.Title = "Select configuration";
temporaryDlg.DefaultExt = ".xml";
temporaryDlg.Filter = "XML-file (.xml)|*.xml";
temporaryDlg.CheckFileExists = true;

var dlg = temporaryDlg;

Quant à votre question sur le constructeur, oui, c'est le constructeur par défaut dans les deux cas. La première ligne est un appel au constructeur, quand il dit new. Vous pouvez dire que c'est le constructeur par défaut car aucun paramètre n'est passé.

Autres conseils

Oui, il est identique à:

var dlg = new Microsoft.Win32.OpenFileDialog();

dlg.Title = "Select configuration";
dlg.DefaultExt = ".xml";
dlg.Filter = "XML-file (.xml)|*.xml";
dlg.CheckFileExists = true;

Il fait exactement ce que vous avez deviné - appelez le constructeur, puis utilisez les colons de propriété publics.

Oui, il implique le même IE créé avec le constructeur par défaut et les accessoires utilisés pour attribuer la valeur, c'est la syntaxe .NET3.5 ou supérieure à la prise en charge de l'initialisation de l'objet

Oui, c'est du sucre syntaxique. Le compilateur générera le code suivant pour ceci:

var dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Title = "Select configuration";
dlg.DefaultExt = ".xml";
dlg.Filter = "XML-file (.xml)|*.xml";
dlg.CheckFileExists = true;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top