全球与会员职能

ali*_*ray 1 c# c++ memory-management

我最近一直在玩c ++,并想知道为什么会有这么多全局函数.然后我开始考虑用c#编程以及如何存储成员函数,所以我想我的问题是如果我有一个:

public class Foo {
    public void Bar() { ... }
}

然后我做了一些愚蠢的事情就像在列表中添加1,000,000 Foo一样; 这是否意味着我有1,000,000个Foo对象坐在内存中,每个对象都有自己的Bar()函数?或者做一些更聪明的事情?

谢谢.

jas*_*son 8

不,只有一个例子.类的所有实例都指向一个对象,该对象包含所有采用隐式第一个参数的实例方法this.在实例上调用实例方法时,该实例的this指针将作为第一个参数传递给该方法.这就是该方法如何知道该实例的所有实例字段和属性.

有关详细信息,请参阅CLR通过C#.

当然,这很复杂virtual.CLR通过C#将为您列出区别,如果您对此主题感兴趣,强烈推荐.无论哪种方式,每个实例方法仍然只有一个实例.问题在于如何解决这些方法.