用于打印通用线性链表的虚函数

时间:2014-02-01 01:21:09

标签: c# generics singly-linked-list

我有一个在C#console应用程序中使用泛型实现线性链表的任务。

该类还应包含print()方法来打印列表的元素。 线性列表的条件为long类型(CNodeLong)或String类型(CNodeString),均来自CNode,具有虚函数Print( )。

我在实施打印方法时遇到问题。我不知道它应该在哪里,以及如何覆盖它。

这是我的CNode类和CList类:

public class CNode<T>
{
    private CNode<T> next;
    private T item;

    public CNode<T> Next
    {
        get { return next; }
        set { next = value; }
    }

    public T Item
    {
        get { return item; }
        set { item = value; }
    }

     public CNode(T item)
        : this(item,null)
    {
    }

    public CNode(T item, CNode<T> next)
    {
        this.item = item;
        this.next = next;
    }
}

class CList<T>
{
    private CNode<T> first;
    private CNode<T> last;
    private int count;

    public CNode<T> First
    {
        get { return first; }
    }

    public CNode<T> Last
    {
        get { return last; }
    }

    public int Count
    {
        get { return count; }
    }

     public CList(string strListName)
    {
        count = 0;
        first = last = null;
    }
}

1 个答案:

答案 0 :(得分:1)

您可能应该覆盖 ToString 方法,并将虚拟 Print 方法添加到 CNode 。 (我还将 PrintList 方法添加到 CList ):

public class CNode<T>
{
    ...

    public override string ToString()
    {
        return item.ToString();
    }
    virtual public void Print()
    {
        Console.WriteLine(item);
    }   
}

class CList<T>
{
    ...

    public void PrintList()
    {
        CNode<T> current = first;
        while (current != null)
        {
            Console.WriteLine(current.ToString());
            current = current.Next;
        }
    }
}

然后您可以覆盖子类中的虚方法:

public class CNodeString : CNode<string>
{
    public CNodeString(string item) : base(item) { }

    override public void Print()
    {
        Console.WriteLine("Printing from CNodeString");
        base.Print();
    }
}

public class CNodeLong : CNode<long>
{
    public CNodeLong(long item) : base(item) { }

    override public void Print()
    {
        Console.WriteLine("Printing from CNodeLong");
        base.Print();
    }
}