繁体   English   中英

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

[英]Virtual function for printing generic linear linked list

我有一项任务,要在C#控制台应用程序中使用泛型来实现线性链接列表。

该类还应该包含一个print()方法来打印列表中的元素。 线性列表的条件应为long型( CNodeLong )或String类型( CNodeString ),两者均使用虚拟函数Print()从CNode继承。

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

这是我的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;
    }
}

您可能应该重写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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM