我花了一些调试来弄清楚(或者我认为)。我会让代码在你身上散开,看看你想出了什么。有一个简单的Contact
类:意外的C#行为与自动属性和构造函数
- 一些自动特性,
- 一个参数的构造函数,根据它获得
- 参数的构造函数,它总是调用的参数总是递增
Contact.ID
财产,并设置其他属性具有默认值的参数化构造函数。
首先看代码;其输出与所述问题如下代码:
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);
}
}
输出:
[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]]
问题:
为什么Contact.ID == 0在第二和第三接触件而不是分别为1和2,尽管总是调用参数化的构造函数并始终增加ID属性?
@Brian:你的意思是删除联系人类?没有它,这个问题没有什么意义...... – 2010-09-24 06:22:20
@Jon:Doh!谢谢。 – 2010-09-24 06:24:17