框对象并故意丢失 unnecessary/extra 数据?

Box object and intendedly lose unnecessary/extra data?

我如何装箱一个对象(例如从 B 类到 A 类)并故意丢失额外数据?

示例:

class A
{
    private string a;
    private DateTime time;

    public A(string a)
    {
        this.a = a;
        this.time = DateTime.Now;
    }
}

//...

class B:A
{
    private string b;

    public B(string a, string b):base(a)
    {
        this.b = b;
    }
}

//...

B b1 = new B("A", "B");

A a1 = (A)b; // Still has variable b

在这个例子中,我创建了一个 B,然后将其装箱成一个 A。新的 A 仍然保存着 b 变量,因为实际上它指向 B 对象。

我知道我可以用 B 的旧数据创建一个新的 A,但是(在这个例子中)如果我用旧数据调用 A 的构造函数B,时间变量是错误的。

你不能。您不能更改 .NET 中对象的类型。创建后,类型是固定的。 B 对象在您创建时是 B,现在是 B,并且它将继续是 B,直到它被收集。

如果你想要一个A,你需要制作一个A