【发布时间】:2019-09-26 00:24:28
【问题描述】:
我对 Autodesk 装配体进行了反思,发现如下:
请注意,对于PressurePipeNetwork 类,它是public,并且有一个方法AddLinePipe,它也是一个public。但是,AddLinePipe、PressurePartSize 的参数之一是internal。
通常我们将无法在 .Net 中使用这样的代码进行编译(并且我们会得到“Inconsistent Accessibility”类型的编译错误)。但不知何故,这个大会侥幸逃脱了。
我已经检查过了,程序集中只有一个PressurePartSize。
我不太确定何时有人说它不能完成。 欧特克已经做到了;我得到了程序集!
不仅如此,人们还可以以某种方式使用 C# 中的库,but with the error message
Autodesk.Civil.DatabaseServices.Styles.PressurePartSize 正在显示 由于保护级别而无法访问的错误。
怎么做? 我愿意使用任何语言来实现这一点,而不仅仅是 C#。或.Net
【问题讨论】:
-
我不知道。但几乎没有迹象表明这个库是用 C# 编写的。该库的开发人员可以使用不同的语言,使用对这些事情不那么严格的不同编译器。 (或者,也许很久以前在 C# 中使用了一个古老的 C# 编译器,该编译器还没有那种可访问性检查;我真的不知道,我只是边走边写。;-) )
-
你做不到。时期。另一个不同的问题是反编译的代码是什么意思,如果两个 PressurePartSize 类型相同,它们是如何实现的,但是使用今天的 C# 编译器,你无法做到。
-
值得注意的是,
PressurePipeNetwork的唯一构造函数是内部的。 -
我也质疑这个反编译的有效性,看起来 Telerik 反编译器在这个代码上到处都是,你确定它被正确反编译,可读的部分吗?当然,它令人讨厌的原因当然可能是代码不是有效的 C#,它试图将其硬塞到 C# 语法中,但没有成功。
-
这不是 C# 代码,它是用 C++/CLI 编写的。 PressurePartSize 很可能是原生 C++ 类。 C++/CLI 编译器为此类发出元数据定义,但它不可访问。只要调用是从 C++/CLI 代码进行的,就不是问题。这个反编译器死在它上面并不是很不寻常。 Reflector 在此类代码上做得更好,但没有 .NET 反编译器会反编译本机代码。
标签: .net public access-modifiers internals