我正在查看内部.Net类的源代码,并希望使用反射修改函数。 (通过使用反射将原始函数的每一行重写为一个新函数并将其修改添加到其中)
object responseObject = request.ConnectionAsyncResult.InternalWaitForCompletion();
ConnectStream writeStream = responseObject as ConnectStream;
if (writeStream == null) ...
我应该如何编写代码的第二行?
代码检查对象是否是特定类,但如果类是内部类,我不知道如何执行此操作。如何将对象转换为内部类?
ConnectStream是一个内部类
答案 0 :(得分:3)
嗯,你不是。您只需要为每一步使用反射 - 编译器肯定不会帮助您:)
"重写每一行"无论如何,这是一个坏主意 - 获得实际工作的代码有点棘手。相反,您可能只是想让您的帮助方法调用原始方法,以及做您需要做的任何事情。
使用反射时,您不需要在编译时知道类型,并且您不需要遵守所有C#规则。与原始代码大致相同的代码可能如下所示:
if (responseObject != null && responseObject.GetType().Name == "ConnectStream")
根据您的实际需求,还有更好的方法来进行检查 - 例如,您可以使用System.Net
程序集并找到具有正确名称空间和所有内容的ConnectStream
类型,以及直接比较两个Type
实例。但是在这样的代码中,它并不是必需的。