C# 多个类中的同一代码没有继承性

C# 多个类中的同一代码没有继承性,c#,inheritance,antlr4,C#,Inheritance,Antlr4,我正在Visual Studio 2015中使用AnTLR的C#插件。AnTLR有一个类ParserRuleContext,所有解析器规则类都从该类继承。解析器规则类本身声明为分部类,如下所示: public partial class SomeRuleContext : ParserRuleContext { /* stuff goes here */ } public class ParserRuleContext : RuleContext { } ParserRuleCont

我正在Visual Studio 2015中使用AnTLR的C#插件。AnTLR有一个类
ParserRuleContext
,所有解析器规则类都从该类继承。解析器规则类本身声明为分部类,如下所示:

public partial class SomeRuleContext : ParserRuleContext {
    /* stuff goes here */
}
public class ParserRuleContext : RuleContext
{
}
ParserRuleContext
的定义如下所示:

public partial class SomeRuleContext : ParserRuleContext {
    /* stuff goes here */
}
public class ParserRuleContext : RuleContext
{
}
我正在为所有解析器规则实现我自己的分部类,以便对解析器树进行自定义。我希望能够将属性添加到
parserContext
(以及稍后的其他属性/字段/方法),但
parserContext
未声明为
部分。因为规则类都已经从另一个类继承,所以我不能让它们的部分实现也从一个类继承。扩展方法无法获得我想要的所有功能(无法添加属性/字段),接口让我将完全相同的代码复制/粘贴到每个类中。作为一名软件开发人员,这最后一部分几乎让我恶心

我考虑过添加一个单一的常量属性,该属性指向一个包含我想要的功能的对象,但该解决方案让我觉得很笨拙,并向该类型的任何成员添加了一个额外的调用。因此:

SomeRuleContextInstance.CustomProperty = new FileInfo( "path" );
变成这样:

SomeRuleContextInstance.CommonFunctionality.CustomProperty = new FileInfo( "path" );
我更喜欢一个更好的解决方案


任何人都可以提供一种方法来修改
parserContext
基类,或者不让我到处复制/粘贴代码?这可以通过反射实现吗?

您可以在具体的上下文类和
parserContext
之间添加额外的继承级别

只需创建一个继承
ParserRuleContext
的类:

public abstract class MyParserRuleContext : ParserRuleContext
{
    // Whatever you want here
}
然后告诉你的语法与以下选项一起使用:

语法我的语法;
选择权{
contextSuperClass=MyParserRuleContext;
}
// ...

我在这里找到了两个注释:A)我需要
MyParserRuleContext
类位于不同的名称空间;B)您不能使用Java目标从命令行运行语法来获得解析树的可视化(obv…I haz facepalm now)。通过设置
options=namespace.Names.MoreNames.myparserureContext
解决了名称空间问题。否则,这是完美的。谢谢(可以找到所有语法选项)。