Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有可能知道一个类是否已经用扩展方法进行了扩展?_C#_Vb.net_Extension Methods - Fatal编程技术网

C# 是否有可能知道一个类是否已经用扩展方法进行了扩展?

C# 是否有可能知道一个类是否已经用扩展方法进行了扩展?,c#,vb.net,extension-methods,C#,Vb.net,Extension Methods,在VB.NET或C中,有没有一种方法可以确定一个类是否已通过编辑进行了扩展?现在,问题已被更改为引用扩展方法,这可能是OP的意图,也可能不是OP的意图-不,您无法判断某个类型是否是扩展方法的目标,除非它是静态类,在这种情况下,它不能以这种方式使用,除非您知道所有相关的潜在组件 扩展方法只是静态非泛型顶级类型中的静态方法,用属性修饰。你实际上是在问这样一种方法是否存在。您可以迭代所有关心的程序集中的所有方法,以尝试找到针对该类型的扩展方法,但仅此而已 原始答案,当问题没有提到扩展方法时 如果您知道

在VB.NET或C中,有没有一种方法可以确定一个类是否已通过编辑进行了扩展?

现在,问题已被更改为引用扩展方法,这可能是OP的意图,也可能不是OP的意图-不,您无法判断某个类型是否是扩展方法的目标,除非它是静态类,在这种情况下,它不能以这种方式使用,除非您知道所有相关的潜在组件

扩展方法只是静态非泛型顶级类型中的静态方法,用属性修饰。你实际上是在问这样一种方法是否存在。您可以迭代所有关心的程序集中的所有方法,以尝试找到针对该类型的扩展方法,但仅此而已

原始答案,当问题没有提到扩展方法时

如果您知道可以在其中扩展它的所有程序集,则可以使用和检查每个程序集


如果该类未密封且不包含内部抽象成员(即它可以扩展),则您无法判断其他已卸载的程序集是否包含子类(否)。每个类都知道其父类,但不知道其子类。

如果某个类受保护,或者是公共的,则实际上无法确定它是否被扩展

如果要在程序集中或在流程中确定所有加载的程序集,可以使用或进行检查


如果希望在编译时确定而不在解决方案中实际执行,只需将构造函数设置为私有,或将类标记为密封,编译解决方案,并检查所有相关错误。完成后,恢复更改。

不可能知道是否使用扩展方法扩展了类。将扩展方法视为静态过程,在不同的项目中,这些静态过程只是弱地、不同地附加到类上

扩展方法不会创建任何新类型,也永远不会覆盖真正的成员方法,因此在您开始直接调用它们之前,它们无法以任何方式更改对象的行为。因此,您可能不需要检测它们的存在


可以确定特定方法是扩展方法还是真正的成员方法。还可以使用反射列出特定加载程序集中的所有扩展方法。这已经解释清楚了。

您指的是扩展方法还是继承?不管怎样,这两种选择实际上都得到了回答lol@Rabskatran当前位置这并没有真正回答问题。Meta Knight对您的问题进行了编辑,以提及扩展方法,但我们不知道这是否是您真正想要的。我在问题中添加了一个链接以澄清问题。感谢您的双重回答:-我从这两个方面都学到了。