【问题标题】:Can I rebuild .NET class from reference source?我可以从参考源重建 .NET 类吗?
【发布时间】:2015-11-24 15:24:03
【问题描述】:

我想在 System.Net.HttpWebRequest 类中添加一些方法以满足我的需要。我尝试了反射,但它非常复杂,我还需要更改它的许多成员类方法。

我正在通过 .NET 参考源进行调试,我可以查看这些类的源代码。我是否可以复制每个相关的类源代码并构建自己的类?

【问题讨论】:

  • 你知道Extension Methods吗?它们可能会为您提供一种以您需要的方式“扩展”课程的方法。
  • HttpWebRequest 不是sealed,只需从中派生并添加您喜欢的任何内容。如果需要,您可以使用方法隐藏重新实现。
  • 我知道扩展方法,但由于该类涉及许多内部流类。我需要大量反射代码来将我想要的行为添加到 HttpWebRequest 类

标签: c# .net reference-source


【解决方案1】:

对于某些课程可以,但对于许多课程不可以。

.NET 类经常使用未公开公开的内部类,您不仅需要重新构建您感兴趣的类,还需要重新构建所有内部引用。

我建议不要尝试这样做,而是使用Extension Methods 或者如果这不能解决您的问题,请提出一个新问题来描述您正在尝试完成的确切事情,也许我们可以向您展示一种更简单的方法它。

【讨论】:

  • 由于类涉及很多内部类,扩展方法无法解决。启用参考源调试后,我似乎也可以查看任何内部类。我想知道这些符号文件(.pdb)是否正是源代码?它们不是仅用于调试目的吗?
  • 您从未告诉我们您实际上要做什么,所以我们不能说扩展方法是否可以解决它。我 100% 确定您实际面临的任何问题都可以在不重新实现 HttpWebRequest 的情况下得到解决。
  • 就像我说的,我建议您提出一个新问题,详细说明您想要完成的工作,并展示您迄今为止所做的尝试。这个问题是“我可以从参考源重建 .NET 类吗?”你得到了答案“是的,但它会是一个 PITA”。通过在 cmets 中提问,您不太可能获得有意义的帮助。
  • 感谢您的帮助!我会先尝试重建它并询问是否失败
【解决方案2】:

一切皆有可能。

你有源代码。你知道如何复制和粘贴。当然,您可以根据自己的目的修改该代码。

问题是;合法吗?

要回答这个问题,您只需要 examine the license 作为参考源。为此,这是完全合法的,前提是您遵守 MIT 许可证(非常宽松)。

下一个问题是;你应该?可能不是。最有可能的是,您可以通过帮助类或子类添加您想要的功能,或者通过Extension Methods 添加新方法。

【讨论】:

  • 我不确定我是否有源代码。我在在线参考源中看不到 System.Net.HttpWebRequest,但如果我打开 vs 上的调试选项以从微软服务器下载符号文件,我可以通过它进行调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2014-09-17
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多