C# 如何将对象强制转换为内部类

C# 如何将对象强制转换为内部类,c#,reflection,C#,Reflection,我正在查看内部.Net类的源代码,希望使用反射修改函数。(通过使用反射将原始函数的每一行重写为新函数,并将我的修改添加到其中) 我应该如何编写代码的第二行 代码正在检查对象是否是特定类,但如果该类是内部类,我不知道如何执行此操作。如何将对象强制转换为内部类? ConnectStream是一个内部类好吧,你不需要。您只需在每个步骤中使用反射,编译器肯定不会帮您:) “重写每一行”无论如何都不是一个好主意——要得到真正有效的代码有点困难。相反,您可能只想让您的helper方法调用原始方法,以及执行您

我正在查看内部.Net类的源代码,希望使用反射修改函数。(通过使用反射将原始函数的每一行重写为新函数,并将我的修改添加到其中)

我应该如何编写代码的第二行

代码正在检查对象是否是特定类,但如果该类是内部类,我不知道如何执行此操作。如何将对象强制转换为内部类?


ConnectStream是一个内部类

好吧,你不需要。您只需在每个步骤中使用反射,编译器肯定不会帮您:)

“重写每一行”无论如何都不是一个好主意——要得到真正有效的代码有点困难。相反,您可能只想让您的helper方法调用原始方法,以及执行您需要执行的任何操作

使用反射时,不需要在编译时知道类型,也不需要遵守所有C#的规则。与原始代码大致相同的代码可能如下所示:

if (responseObject != null && responseObject.GetType().Name == "ConnectStream")

根据您的实际需要,还有更好的方法进行检查-例如,您可以使用
System.Net
程序集,找到具有适当名称空间和所有内容的
ConnectStream
类型,并直接比较这两个
type
实例。但是在这样的代码中,它并不是真正必要的。

如何重写这些方法?这段代码实际上是想做什么?我很确定你将很难创建一个内部类的实例,但是这个功能在其他方面可能是可行的,比如你想做什么,但是代码应该做什么呢?你仍然在谈论你眼前的问题,但不是你真正想做什么。首先,为什么要修改内部类?您必须解决这个特定子问题的唯一原因很可能是因为您选择了一种特别复杂的方法来解决实际问题。如果您只想检查对象的类型是否与名称匹配,您可以执行
bool isTypeCalledConnectStream=responseObject!=null&&responseObject.GetType().Name==“ConnectStream”;如果(!isTypeCalledConnectStream){…}
但我不了解您的需要。我需要在方法中添加修改,以便无法调用原始方法。我知道我需要在每一个步骤中使用反射,我在问我应该如何编写代码的第二行。如果我的问题是unclear@IsoletChan这就是我要告诉你的-你不知道。您必须使用反射API来调用需要调用的任何东西,并执行任何必要的类型检查。字面上看,
responseObject.GetType().GetMethod(…).Invoke(…)。这是非常乏味的,但这就是打破不变量所付出的代价:)是的,我正在使用反射api并编写这些乏味的代码。您将如何编写代码的第二行?@IsoletChan您不强制转换任何内容-反射最终是非类型化的(也就是说,所有这些方法,如
Invoke
take
object
)。因此,如果您想调用
对象上可能是
ConnectStream
的方法,只需调用
Invoke(writeStream)
。如果要检查
对象
是否是
连接流
,可以执行类似于
的操作(writeStream.GetType().Name==“ConnectStream”)
(根据需要进行调整)。反射和IL都不是C#-规则是不同的。你基本上是在强迫自己做一件复杂的事情,因为C#就是这样做的。谢谢你的详细解释。我被困在如何将其转换为内部类。答案就像你说的,不需要铸造,检查它的类型就足够了。我很好奇,为什么原始代码不简单地检查类型,而是使用as运算符强制转换它?
if (responseObject != null && responseObject.GetType().Name == "ConnectStream")