通过 C# 在 CLR 中有一条语句在 C# 中说,一个类不能伪装成另一个类,因为 GetType 是虚拟的,因此它不能被覆盖
但我认为在 C# 中我们仍然可以隐藏 GetType 的父实现。
我一定错过了什么
如果我隐藏基本的 GetType 实现,那么我可以将我的类伪装成另一个类,对吗?
这里的关键不是 GetType 是否是虚拟的,问题是我们能否在 C# 中将一个类伪装成另一个类
以下是可能重复的 NO.4 答案,所以我的问题更多于此。这种伪装是否可能,如果可以,我们怎么能说我们可以防止 C# 中的类类型伪装?不管 GetType 是不是虚拟的
虽然确实不能覆盖 object.GetType() 方法,但可以使用“new”完全重载它,从而欺骗另一种已知类型。这很有趣,但是,我还没有弄清楚如何从头开始创建“Type”对象的实例,所以下面的示例假装是另一种类型。
public class NotAString { private string m_RealString = string.Empty; public new Type GetType() { return m_RealString.GetType(); } }
创建此实例后,(new NotAString()).GetType() 将确实返回字符串的类型。
share|edit|flag 于 3 月 15 日 18:39 回答
Snooze 博士 213 几乎任何查看 GetType 的东西都有一个对象实例,或者至少是他们控制或可以推理的一些基本类型。如果您已经有一个最派生类型的实例,则无需在其上调用 GetType。关键是只要有人在对象上使用 GetType,他们就可以确定这是系统的实现,而不是任何其他自定义定义。– Servy 3 月 15 日 18:54 添加评论