Создать связный мультисписок на основе указателей с использованием принципов ООП - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Имею задание: создать связный мультисписок на основе указателей с использованием принципов ООП. Для реализации решил выбрать C#. И вот вопрос: мне нужен указатель объекта на другой объект того же класса, который я объявляю как класс из двух полей: значения и указателя. Ругаться начинает. То есть в структурах все нормально:
Листинг программы
  1. unsafe struct abcd
  2. {
  3. int val;
  4. abcd* next;
  5. }
А в классах не хочет:
Листинг программы
  1. unsafe public abstract class ListElem
  2. {
  3. private string value;
  4. private ListElem* next;
  5. }
Error 2 Cannot take the address of, get the size of, or declare a pointer to a managed type ('ExamList.Form1.ListElem')
Не подскажите, как можно этого избежать? Просто мне надо будет от этого класса наследовать потом еще несколько других, поэтому тупо запихнуть все в структуру не получится...
Грубо говоря мне нужен класс, каждый объект которого знает, кто стоит после него в списке.

Решение задачи: «Создать связный мультисписок на основе указателей с использованием принципов ООП»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8.  
  9. namespace ExamList
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         public Form1()
  14.         {
  15.             InitializeComponent();
  16.         }
  17.  
  18.         public SimpleList firstSimpleElm;
  19.  
  20.         public abstract class MyList
  21.         {
  22.             public string value { get; set; }
  23.         }
  24.  
  25.         public class SimpleList: MyList
  26.         {
  27.             public SimpleList next;
  28.  
  29.             public SimpleList(string value)
  30.             {
  31.                 this.value = value;
  32.                 this.next = null;            
  33.             }
  34.  
  35.             static public void Add(ref SimpleList localFirstSimpleElm, string value)
  36.             {
  37.                 if (value == "") return;
  38.                 SimpleList newSimpleElm = new SimpleList(value);
  39.                 if (localFirstSimpleElm == null)
  40.                 {
  41.                     localFirstSimpleElm = newSimpleElm;
  42.                     return;
  43.                 }                
  44.                 SimpleList elm = localFirstSimpleElm;
  45.                 while (elm.next != null)
  46.                     elm = elm.next;
  47.                 elm.next = newSimpleElm;                
  48.             }
  49.  
  50.             static public string PrintList(SimpleList firstElm)
  51.             {
  52.                 if (firstElm == null) return "";
  53.                 string result = "";
  54.                 SimpleList currentSimpleElm = firstElm;
  55.                 do
  56.                 {
  57.                     result += currentSimpleElm.value + "\n";
  58.                     try { currentSimpleElm = currentSimpleElm.next; }
  59.                     catch { }
  60.                 } while (currentSimpleElm != null);
  61.                 return result;
  62.             }
  63.  
  64.         }    
  65.  
  66.         private void prevButton_Click(object sender, EventArgs e)
  67.         {
  68.  
  69.         }
  70.  
  71.         private void nextButton_Click(object sender, EventArgs e)
  72.         {
  73.  
  74.         }
  75.  
  76.         private void newSimpleButton_Click(object sender, EventArgs e)
  77.         {            
  78.             SimpleList.Add(ref firstSimpleElm, newSimpleListBox.Text);
  79.             contentLabel.Text = SimpleList.PrintList(firstSimpleElm);
  80.         }
  81.  
  82.  
  83.     }
  84. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы