首页 新闻 赞助 找找看

关于类中static属性和非static属性的问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-10-19 10:58
 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

求大牛指点.为什么会这样?

mycing的主页 mycing | 初学一级 | 园豆:197
提问于:2015-10-19 10:15
< >
分享
最佳答案
0

这有什么问题么?静态的就是同一个,你设置了五次,只是最后一个起作用,这有什么问题么?

收获园豆:4
顾晓北 | 专家六级 |园豆:10844 | 2015-10-19 10:19

我就是无法理解为什么Test2 实例化五次结果都不一样,那应该Id的内存地址因该是不一样的.那是不是Test1中的Id加了static后实例化五次他们内存地址都是同一个?

mycing | 园豆:197 (初学一级) | 2015-10-19 10:37

@mycing: 这不是废话么?你的test2的属性不是静态的,是实例的,是每个都可以不一样的,比如说吧,人都有两只眼睛,那么人眼睛的个数是2,就是test1的那个静态属性,这是属于类的,属于人类的,而张三头发是黑色的,李四的是白色的,这是实例属性,这个头发颜色就是一个实例属性,就是你的test2,一个属于类,一个属于对象。。。

顾晓北 | 园豆:10844 (专家六级) | 2015-10-19 10:47

@顾晓北: 谢谢,现在明白了.

mycing | 园豆:197 (初学一级) | 2015-10-19 10:57
其他回答(2)
0

买本教科书学.这种语法问题问不完的.

吴瑞祥 | 园豆:29449 (高人七级) | 2015-10-19 10:28
0

Test1中public static in Id{get;set;}这个Id你已经申明了是静态变量,然后你再main中的几次构造实体分别对它赋了五次值,每次赋值都是对它赋值,你最后一次赋的值是5,所以前五个数据打印出来的是同一个数据,Test2中public  int Id{get;set;}属于Test2的成员变量,每次赋值都有自己的存储机制对其进行分别的存储,所以打印出来的就是第二个数据内容

收获园豆:1
孙良泽 | 园豆:212 (菜鸟二级) | 2015-10-19 10:43

按这说法:Test2中public  int Id{get;set;}属于Test2的成员变量. 那Test1中Id就不属于Test1的成员吗?还是说实例多个Test1他们共用同一个Id?

支持(0) 反对(0) mycing | 园豆:197 (初学一级) | 2015-10-19 10:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册