我有一个在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;
}
}
答案 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();
}
}