首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在继承树中插入类

在继承树中插入类
EN

Stack Overflow用户
提问于 2010-09-10 19:00:14
回答 3查看 163关注 0票数 0

我想知道是否可以在继承树中的任意位置插入类。

示例:

代码语言:javascript
复制
class Base
{
    public virtual void DoSomething()
    {
        Console.WriteLine("Base");
    }
}

class D1:Base
{
    public override void DoSomething()
    {
        base.DoSomething();
        Console.WriteLine("D1");
    }
}

class D2:Base
{
    public override void DoSomething()
    {
        base.DoSomething();
        Console.WriteLine("D2");
    }
}

class D3:Base
{
    public override void DoSomething()
    {
        base.DoSomething();
        Console.WriteLine("D3");
    }
}

假设上面的类来自一个没有源代码的库。如果我想修改所有派生类的行为,我必须继承所有派生类,并多次实现相同的东西。然后,我必须将所有类型更改为新派生的类型。一种更简单的方法是直接在Base之后插入一个类,然后以某种方式(这可能很大)使派生类指向它作为它们的基对象。然后可以原封不动地使用派生类。

代码语言:javascript
复制
class Inserted : after Base
{
    public override void DoSomething()
    {
        base.DoSomething();
        Console.WriteLine("Inserted");
    }
}

代码语言:javascript
复制
class Inserted : before D1
{
    public override void DoSomething()
    {
        base.DoSomething();
        Console.WriteLine("Inserted");
    }
}

关键字"before“和"after”将控制插入类的确切位置。

在过去,我使用的系统支持这样的东西,这是一个巨大的生产力提升。

例如,使用Java或.Net运行时,这在原则上是可能的吗?是否可以将v_table更改为指向新的基类?为什么没有现代系统支持这一点?在可靠性、安全性等方面的影响是什么?

EN

回答 3

Stack Overflow用户

发布于 2010-09-10 19:06:54

来自JRebel的家伙无法处理JVM上类型层次结构的变化,因为这是他们的核心能力,我得出结论,这几乎是不可能的。

然而,我认为您想要做的大多数事情都可以使用面向方面编程和AspectJ来完成。

票数 1
EN

Stack Overflow用户

发布于 2010-09-10 19:09:06

当你说“修改行为”时,你是在寻找装饰器模式吗?

票数 0
EN

Stack Overflow用户

发布于 2010-09-10 22:30:53

这在.NET和Java中是做不到的。你能说出哪个系统支持它吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3684041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档