2010-10-30 2 views
0

Я знаю, что в C# нет указателей, но я пытаюсь выяснить, как сделать следующее, что я бы сделал с указателями (или, еще лучше, итераторами) в C++ (я беру курс на C#, но Я уже знаю C++).C# итераторы и указатели?

У нас есть задание написать простую программу «магазин» (инвентарь, транзакции и т. Д.). Моя первая идея (исходящая из C++) заключалась в следующем: иметь связанный список предметов и их количество на складе. Затем введите класс, представляющий продажу, в которой есть список элементов текущей продажи, где каждый элемент представлен как итератор для определенных элементов в списке основных запасов и значения для суммы. (Я надеюсь, что это понятно.)

Я попытался сделать то же самое в C#, но не могу понять, как получить эти итераторы в главный список (они также должны быть хорошими для обновлений в главном списке). Как вы это делаете?

+1

Язык C# поддерживает указатели. http://msdn.microsoft.com/en-us/library/t2yzs44b.aspx – Inisheer

+0

Хорошо, но не легко, красиво или рекомендуется, и, следовательно, не то, что я ищу. – baruch

+3

Я не уверен (из вопроса), является ли ответ здесь просто «ссылками на объекты» и «Список » ...? –

ответ

2

Вам не нужно ничего делать, чтобы использовать ссылки, они используются по умолчанию на C#.

Я предполагаю, что вы могли бы сделать что-то подобное в C++:

class Sale { 
    public: 
    void AddItem(Item* i) { 
     items.push_back(i); 
    } 

    private: 
    std::vector<Item*> items; 
}; 

В C#, так как она использует ссылки, а не проходить по значению по умолчанию, вы получите такое поведение по умолчанию. Вы бы получить подобное поведение в C# из следующего кода:

class Sale { 
    private List<Item> items; 

    public void AddItem(Item i) { 
    items.Add(i); 
    } 
} 

Для вызова этого C# код, который вы могли бы просто сделать что-то вроде

Item item = new Item("A test item"); 
Sale sale = new Sale(); 
sale.AddItem(item); 
+3

Это даже не близко к тому, о чем попросил ОП. – Puppy

+0

@DeadMG Как я читал OP, он хочет использовать указатели, чтобы его «Продажа» не содержала копии предметов, поэтому любые обновления, сделанные для элементов в главном списке магазинов, также отображались в Sales. В то время как он упоминает использование Итераторов, то, как я его читал, он не хотел, чтобы они могли перемещаться по списку, а скорее как указатель на определенный элемент списка, поэтому, как только он его получит, он будет разыменован и не увеличиваются/уменьшаются. – Zareth

+0

Основная цель итератора - разрешить итерацию. Отсюда и название.Ссылки не будут служить одной и той же цели, потому что если вы сделаете ссылку на список [0], затем измените список [0], ссылка не будет обновлена, тогда как если бы вы сделали итератор для вектора [0], затем назначается вектору [0], изменение будет обновляться в итераторе. – Puppy

0

Вы почти наверняка придется написать свой собственный итератор стиль интерфейс - C#, похоже, не предлагает ничего близкого к столь гибкому. Вы можете написать свои собственные методы расширения и класс, который предлагает это, но вам придется сделать это самостоятельно, я уверен, что он не существует в стандартных библиотеках .NET.

Смежные вопросы