Diciamo che ho una classe Node
astratta e una classe% co_de derivata da BinaryOperation
e tre classi Node
, IntegerConstant
e RealConstant
derivate anche da CharacterConstant
.
Il design generale per la classe Node
sarebbe simile a questo:
public class BinaryOperation : Node
{
public Node Operand1 { get; private set; }
public Node Operand2 { get; private set; }
//...
}
Ho anche metodi di analisi per quelle classi, ognuna delle quali restituisce un determinato tipo. Quindi BinaryOperation
è di tipo IsIntegerConstant()
e così via.
Ora, quando analizzo un operando in espressione, posso facilmente controllare il tipo in questo modo:
Node operand1 = IsIntegerConstant() ??
IsRealConstant() ??
IsCharacterConstant();
Tuttavia C # non lo consente . Perché il compilatore non può determinare il tipo di espressione in IntegerConstant
assegnazione. Cosa dovrei fare? Devo fare in modo che tutti i metodi di analisi restituiscano il tipo operand1
o il cast di ciascun metodo in Node
. O forse creare membri di classe Node
separati per ciascun tipo di operando?