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?