class Program { static void Main(string[] args) { List<Test1> list1 = new List<Test1>(){ new Test1(1), new Test1(2), new Test1(3), new Test1(4), new Test1(5) }; List<Test2> list2 = new List<Test2>(){ new Test2(1), new Test2(2), new Test2(3), new Test2(4), new Test2(5) }; foreach (var item in list1) item.Print(); Console.WriteLine("-------------------------"); foreach (var item in list2) item.Print(); Console.ReadKey(); } } public class Test1 { public static int Id { get; set; } public Test1(int id) { Id = id; } public void Print() { Console.WriteLine(Id); } } public class Test2 { public int Id { get; set; } public Test2(int id) { Id = id; } public void Print() { Console.WriteLine(Id); } }
运行结果:
5 5 5 5 5 ------------------------- 1 2 3 4 5
求大牛指点.为什么会这样?
这有什么问题么?静态的就是同一个,你设置了五次,只是最后一个起作用,这有什么问题么?
我就是无法理解为什么Test2 实例化五次结果都不一样,那应该Id的内存地址因该是不一样的.那是不是Test1中的Id加了static后实例化五次他们内存地址都是同一个?
@mycing: 这不是废话么?你的test2的属性不是静态的,是实例的,是每个都可以不一样的,比如说吧,人都有两只眼睛,那么人眼睛的个数是2,就是test1的那个静态属性,这是属于类的,属于人类的,而张三头发是黑色的,李四的是白色的,这是实例属性,这个头发颜色就是一个实例属性,就是你的test2,一个属于类,一个属于对象。。。
@顾晓北: 谢谢,现在明白了.
买本教科书学.这种语法问题问不完的.
Test1中public static in Id{get;set;}这个Id你已经申明了是静态变量,然后你再main中的几次构造实体分别对它赋了五次值,每次赋值都是对它赋值,你最后一次赋的值是5,所以前五个数据打印出来的是同一个数据,Test2中public int Id{get;set;}属于Test2的成员变量,每次赋值都有自己的存储机制对其进行分别的存储,所以打印出来的就是第二个数据内容
按这说法:Test2中public int Id{get;set;}属于Test2的成员变量. 那Test1中Id就不属于Test1的成员吗?还是说实例多个Test1他们共用同一个Id?