所以我对C#很陌生,我得到的引用类型是存储对内存中某个对象的引用的类型(通常在堆上)。我的问题是,如果我有一个类将其他类作为其成员变量,那些类成员变量是否也存储引用?我问,因为很多时候你只希望你的类成员变量与他们拥有的对象的生命周期联系起来,让这些成员变量存储对内存中其他地方的对象的引用是没有意义的。在查找这些变量的值时,这只会增加不必要的间接性。 现在我知道解决这个问题的一种方法是制作那些成员变量结构,但是如果这些成员变量需要继承或其他只有类的功能呢?任何见解都表示赞赏。
答案 0 :(得分:5)
很多时候你只想要你的类成员变量绑定 到他们自己的对象的生命周期
好吧,成员变量 与拥有对象的生命周期相关联。只要你的拥有对象实例被垃圾收集 - 只要没有对其成员对象的其他引用 - 它们也有资格进行垃圾收集。
随着您对语言和这些概念越来越熟悉,我认为您会发现在几乎所有情况下使用引用类型都是非常可取的。在一组有限的情况下,您需要定义一个值类型,如结构,而不是类,并且选择struct over class的决定与类实例的生命周期无关。请参阅MSDN for guidance on choosing between a class and a struct。
答案 1 :(得分:0)
我的问题是,如果我有一个类将其他类作为其成员变量,那些类成员变量是否也存储引用?
是
...你只是希望你的类成员变量与他们拥有的对象的生命周期联系在一起......一种方法是制作那些成员变量结构但是如果这些成员变量需要继承或其他只有类的功能呢? ?
当没有对它们的引用时,所有对象都被标记为垃圾收集,因此您只需使用类而不是结构。与阶级相比,结构是一种罕见的品种。