Я, кажется, забыл некоторые из основных правил наследования, потому что я не могу понять, почему это не сработает. У меня есть класс SuffixNode, который расширяет узел.Простой наследование не работает?
Node:
class Node
{
public char label;
public Node parent;
public Dictionary<char,Node> children;
public Node(Node NewParent, char NewLabel)
{
this.parent = NewParent;
this.label = NewLabel;
children=new Dictionary<char,Node>();
}
}
SuffixNode:
class SuffixNode: Node
{
public Dictionary<String, int> Location=new Dictionary<String, int>();
public SuffixNode(Node NewParent):base(NewParent, '$')
{
}
public void AddLocation(String loc,int offset)
{
this.Location.Add(loc, offset);
}
}
Я пытаюсь вызвать метод AddLocation в основной программе из класса SuffixNode, но он дает мне ошибку о том, что нет такого метода существует (в классе узлов):
Node n;
char FirstChar = suffix[0]; //first character of the suffix
if (suffix == "")
{
return true;
}
//If the first character of a suffix IS NOT a child of the parent
if (!parent.children.ContainsKey(FirstChar))
{
if (FirstChar == '$')
{
n = new SuffixNode(parent);
n.AddLocation(document, offset);
}
else
{
n = new Node(parent, FirstChar); //Create a new node with the first char of the suffix as the label
parent.children.Add(FirstChar, n); //Add new node to the children collection of the parent
}
}
Я уверен, что это очень простой ответ, но я просто не могу понять, почему это не работает. Не должно быть
Node n = new SuffixNode(parent)
Позволяет мне получить доступ к методам и переменным SuffixNode?
Почему вы используете 'Node' вместо' SuffixNode' для 'n'? –
Мое дерево будет содержать разные типы узлов, я думал, что это будет полезно позже, если я захочу использовать некоторые полиморфные методы. – Matt
Отмечено, что 'if (suffix ==" ")' will * никогда не будет выполняться *, потому что, если условие было 'true', предыдущая строка (' char FirstChar = suffix [0]; ') выбросить исключение. – phoog