gpt4 book ai didi

c# - 在继承树中插入类

转载 作者:行者123 更新时间:2023-12-01 16:01:45 25 4
gpt4 key购买 nike

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

示例:

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 之后插入一个类,并以某种方式(这可能是一个很大的方式)使派生类指向该类作为其基对象。然后,派生类可以不加修改地使用。

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

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

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

过去,我使用的系统可以支持类似的功能,这极大地提高了生产力。

这基本上可以通过 .Net CLR 或 Java 运行时等实现吗?是否可以更改 v_table 以指向新的基类?为什么现代系统不支持这个?这会对可靠性、安全性等产生什么影响?

最佳答案

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

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

关于c# - 在继承树中插入类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com