Создать связный мультисписок на основе указателей с использованием принципов ООП - C#
Формулировка задачи:
Здравствуйте. Имею задание: создать связный мультисписок на основе указателей с использованием принципов ООП. Для реализации решил выбрать C#. И вот вопрос: мне нужен указатель объекта на другой объект того же класса, который я объявляю как класс из двух полей: значения и указателя. Ругаться начинает. То есть в структурах все нормально:
А в классах не хочет:
Не подскажите, как можно этого избежать? Просто мне надо будет от этого класса наследовать потом еще несколько других, поэтому тупо запихнуть все в структуру не получится...
unsafe struct abcd
{
int val;
abcd* next;
}unsafe public abstract class ListElem
{
private string value;
private ListElem* next;
}
Error 2 Cannot take the address of, get the size of, or declare a pointer to a managed type ('ExamList.Form1.ListElem')
Грубо говоря мне нужен класс, каждый объект которого знает, кто стоит после него в списке.
Решение задачи: «Создать связный мультисписок на основе указателей с использованием принципов ООП»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ExamList
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public SimpleList firstSimpleElm;
public abstract class MyList
{
public string value { get; set; }
}
public class SimpleList: MyList
{
public SimpleList next;
public SimpleList(string value)
{
this.value = value;
this.next = null;
}
static public void Add(ref SimpleList localFirstSimpleElm, string value)
{
if (value == "") return;
SimpleList newSimpleElm = new SimpleList(value);
if (localFirstSimpleElm == null)
{
localFirstSimpleElm = newSimpleElm;
return;
}
SimpleList elm = localFirstSimpleElm;
while (elm.next != null)
elm = elm.next;
elm.next = newSimpleElm;
}
static public string PrintList(SimpleList firstElm)
{
if (firstElm == null) return "";
string result = "";
SimpleList currentSimpleElm = firstElm;
do
{
result += currentSimpleElm.value + "\n";
try { currentSimpleElm = currentSimpleElm.next; }
catch { }
} while (currentSimpleElm != null);
return result;
}
}
private void prevButton_Click(object sender, EventArgs e)
{
}
private void nextButton_Click(object sender, EventArgs e)
{
}
private void newSimpleButton_Click(object sender, EventArgs e)
{
SimpleList.Add(ref firstSimpleElm, newSimpleListBox.Text);
contentLabel.Text = SimpleList.PrintList(firstSimpleElm);
}
}
}