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("...");
}