框对象并故意丢失 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
。
我如何装箱一个对象(例如从 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
。