C# 从基类对象获取派生对象

C# 从基类对象获取派生对象,c#,inheritance,C#,Inheritance,我正在为学习目的编写语法分析器,我在继承方面有问题 var grammars = new Grammar[] { new VariableGrammar() }; this.GrammarRules = new List<Grammar>(grammars); 但问题是grammarRule是Grammar,而不是variablegram。因此,调用Grammar类的Parse方法,而不是variablegramar类 问题是: 在这种情况下,是否可以使用正确的类型访问原始对象Va

我正在为学习目的编写语法分析器,我在继承方面有问题

var grammars = new Grammar[] { new VariableGrammar() };
this.GrammarRules = new List<Grammar>(grammars);
但问题是
grammarRule
Grammar
,而不是
variablegram
。因此,调用
Grammar
类的
Parse
方法,而不是
variablegramar

问题是: 在这种情况下,是否可以使用正确的类型访问原始对象
VariableGrammar

我知道有可能强制转换它,但是我必须为每个可能的强制转换选项编写一个大的代码块
另一种可能是使用反射并通过这种方法调用方法,但这也不是很好,因为当我更改方法名称时,我也必须在反射中更改它,因为我只能通过方法名称作为
字符串调用该方法

但问题是
grammarRule
Grammar
,而不是
variablegram

实际上,两者都是,因为
variablegram
源自
Grammar

因此,调用
Grammar
类的
Parse
方法,而不是
variablegramar


这意味着
Grammar
类中的
Parse
方法没有标记。在代码< >代码>虚拟< /代码>,并在<代码> VariableGrammar < /代码>中添加“<代码>覆盖> <代码>时,问题将得到解决。

提示:看一下<代码>虚拟< /COD> >代码>抽象< /代码>方法:另外一句话:我想你是在说反射,不,我不认为这是一个选项。卡斯滕:是的,我的意思是反思:)你的建议也很有用——谢谢
var grammars = new Grammar[] { new VariableGrammar() };
this.GrammarRules = new List<Grammar>(grammars);

foreach (var grammarRule in this.GrammarRules)
{
    grammarRule.Parse("...");
}