Il m'a fallu du débogage pour comprendre cela (ou je pense). Je vais laisser le code lâche sur vous et voir ce que vous venez avec. Il y a une classe simple Contact
avec:Comportement C# inattendu avec autoproperties et constructeurs
- Certaines propriétés auto,
- Un constructeur paramétrés qui incrémente toujours la propriété
Contact.ID
et définit d'autres propriétés en fonction des arguments qu'il obtient - Un constructeur parameterless qui appelle toujours le constructeur paramétré avec des valeurs par défaut.
D'abord voir le code; sa sortie et la question suit le code:
using System;
class Program
{
private static void Main(string[] args)
{
Contact[] contacts_array = {
//Contact 0
new Contact(),
//Contact 1
new Contact {
Name = "contactName1",
Age = 40,
Email = "[email protected]"
},
//Contact 2
new Contact {
Name = "contactName2",
Age = 41,
Email = "[email protected]"
},
//Contact 3
new Contact("contactName3",
42,
"[email protected]"),
};
foreach (var contact in contacts_array)
Console.WriteLine(contact);
Console.ReadLine();
}
}
public class Contact
{
public static int totalContacts = 0;
public int Id { get; private set; }
public string Name { get; set; }
public int? Age { get; set; }
public string Email { get; set; }
public Contact()
{
new Contact("ANONYMOUS", null, "[email protected]");
}
public Contact(string name, int? age, string email)
{
Id = Contact.totalContacts++;
Name = name;
Age = age;
Email = email;
}
public override string ToString()
{
return string.Format("[Contact: Id={0}, Name={1}, Age={2}, Email={3}]",
Id, Name, Age, Email);
}
}
Sortie:
[Contact: Id=0, Name=, Age=, Email=]
[Contact: Id=0, Name=contactName1, Age=40, [email protected]]
[Contact: Id=0, Name=contactName2, Age=41, [email protected]]
[Contact: Id=3, Name=contactName3, Age=42, [email protected]]
Question:
Pourquoi le Contact.ID == 0 dans les deuxième et troisième contacts plutôt être 1 et 2 respectivement, malgré que le constructeur paramétré soit toujours appelé et toujours incrémenter la propriété ID?
@Brian: Vouliez-vous supprimer la classe Contact? La question n'a pas beaucoup de sens sans cela ... –
@Jon: Doh! Merci. –