.net 在调用类的时候是调用类本身,还是类的副本

2019-05-28 15:49发布

问题:

1 一个类,里面有公共方法,多线程中都去调用公共类中的方法,这时调用的是类方法本身,还是每个线程调用的都是类方法的副本?
2 一个普通类,里面有一个静态的字段,类实例化多次,这个静态字段是只有第一次实例化的时候被创建,其余实例化的时候是把第一次创建的时候的地址给后面实例化的静态字段了么?
3 平常干活代码会写。。。我是自学的编程,所以好多这种基础知识不明白,有没有什么推荐的书,专门讲这种基础内容的?

回答1:

刚入行吧。多花点时间考虑这些问题应该会有提升。
上面有一楼已经回答得不错了。

计算机牛逼的地方就是 存储代码,执行代码。方法就是代码。开多个线程调一个类里的方法,这里方法代码就一份,所以才会出现后面的临界资原问题。方法就一串静态的代码放那里,只有一份。第二个问题,如果你是计算机专业的不应该这样问,书上明确说明静态属性,字段属于类的,所以也不是第一次实例化时创建,而且是属于类的,也就是类创建的时候就创建了,什么时候?加载dll到内存,用类的Type创建类的结构时就有了。而你再用这个类的结构去创建instance,这个时候就是对象的数据了。第三个问题,不急,时间长点,你想的问题多了就会慢慢积累就多了。自学还是有些局限性,当然知识你都可以拿得到的,只要你原意。



回答2:

你看看《CLR var C#》这本书就明白了。我虽然也看过此书,但是我已经忘了。



回答3:

我的理解是:
1)静态方法只有一份,但静态方法内声明的变量,在每个线程调用时,都会新创建一份。
2)静态成员也只有一份,只在第一次访问静态成员时创建,或第一次类实例化的时候创建。



回答4:

1.方法没有副本的说法.所有的方法都是静态.
2.不是在第一次实例化时被创建.是在这个类的静态成员第一次被调用时触发静态构造函数.初始化静态字段.
3.找个重点大学的软件专业.看看他们专业有哪几门课.把教科书都买.跟着他们的教学计划慢慢学.



回答5:

你的第一个问题,感觉是把类和对象搞混了



回答6:

我是菜鸟,我觉得静态成员和常量一起理解比较好,感觉就像引用类型在内存中存储方式一样,是key指向value,key有多个,但是value只有一个。。。。。不知道我说的意思楼主有没有听懂