0

我有一个抽象类,它调用它的一个抽象方法,如下所示:

public abstract class VirtualAsset : ISerializable
{
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        SerializeAsset(info);
    }

    public abstract void SerializeAsset(SerializationInfo info);
}

问题是,由于我信任用户输入,恶意用户(或不知道自己在做什么的用户)极有可能尝试传入 VirtualAsset 的实例,而不是实现所需抽象函数的子类...事实上,当我故意这样做时,程序崩溃而没有错误。

我试过使用 try-catch 无济于事......有效处理这个问题的最佳方法是什么?每次调用可覆盖的方法时都必须检查 self.GetType() 吗?

4

2 回答 2

2

问题是,由于我信任用户输入,恶意用户(或不知道自己在做什么的用户)极有可能尝试传入 VirtualAsset 的实例

不,这是不可能的。根据定义,抽象类不能被实例化。没有人能够创建 的实例VirtualAsset,并且任何不实现抽象方法的派生类也必须是抽象的。

于 2012-11-15T00:27:52.363 回答
0

由于无法创建抽象类的实例,因此可验证代码不存在此问题。

现在,如果一个人传递了一个类的名称,而您尝试创建这样的类,创建将失败。它将失败是因为无法创建抽象类,而不是因为它试图调用抽象方法。

于 2012-11-15T00:28:22.320 回答