我对C#很新。在C ++中,如果我想要两个包含部分或全部相同数据的集合,那么它真的很容易。例如,您只需在堆上创建对象,并在每个集合中使用一组(自动)指针。 C#似乎没有指针的概念,所以你如何在C#中做同样的事情?
一个集合(可能是一个数组)将包含所有对象。另一个(可能是队列)将包含数组中的内容的子集。最终,对象将从队列中删除,但仍保留在数组中。
我确信这是一个非常简单的问题,但我仍然在考虑C ++和C#之间的差异。
答案 0 :(得分:2)
您可能需要首先了解参考和值类型。
答案 1 :(得分:2)
C#在不安全的上下文中有指针,就像你习惯于在C ++中一样。但是,大多数复杂对象在C#中通过引用传递开始,这意味着(简化)您添加到两个集合的单个对象将是同一个对象。其中,字符串和整数将是值类型,例如,字符串将是不可变的。
有关C#中类型的更多信息:http://msdn.microsoft.com/en-us/library/3ewxz6et.aspx
C#有一个垃圾收集器,可以为你处理内存和引用管理,任何孤立的引用通常都会在合理的时间内被清除。
有关内存管理的更多信息:http://msdn.microsoft.com/en-us/library/f144e03t(v=VS.100).aspx
答案 2 :(得分:0)
在C#中,数据默认为referenced(未复制,除非它是struct(ValueType)),因此如果您在一个地方使用另一个对象分配变量,则它是一个引用,创建
示例:
class C {}
var a = new C();
var b = a;
//a and b points to the same object
无论如何,您可以在unsafe上下文中使用C#中的指针(虽然不推荐)。
答案 3 :(得分:0)
C#中的几乎所有对象都是在堆上构造的,并且可以通过指针访问。 .
几乎与C ++中的->
一样使用。恕我直言,它的工作更自然。
在考虑“指针”时,集合不包含数据,它引用数据。
所以在你的例子中,它会像你描述的那样工作。