平台特定组件

时间:2014-02-01 19:24:47

标签: c# .net .net-assembly

我有PCL类Image和类中的方法来加载图像:

 public Image(string fileName) //constructor
   {
     //platform specific implementation
   }

我是否可以编写另一个程序集来覆盖此方法(通过另一个程序集中的方法隐藏此方法 - 如TypeForwarding)。

一般情况下,我希望该用户选择:  图像组装和一些特定于平台的例如Image.Windows

我有什么方法可以做到吗? (一些解决方法?)

2 个答案:

答案 0 :(得分:2)

[TypeForwardTo]用于隐藏东西,一旦程序执行并开始使用真实程序集,目标平台上不可用的声明。你不想隐藏,你想替换

当然可能,您只需要一组程序集,其声明与引用程序集相同,但方法的工作方式不同,适合于它们运行的​​特定平台。

您确实遇到一个问题,请确保引用程序集与实现程序集完全相同。对于完全限定的程序集名称,您需要完全匹配,这是可行的,并且完全匹配每个类型和方法签名。那不可行。我们无法使用Microsoft用于在PCL中生成引用程序集的工具类型。你可以蹄,但是一个小错误,你很蠢。实际上,您必须创建自己的工具来仔细检查完全匹配。维护也很痛苦。

请注意,.NET中已有优秀的模式可以满足您的需求。使用接口。

答案 1 :(得分:1)

我做了一些类似的研究。

我发现这方面的信息很少,老实说,在.Net中实现起来真的很复杂。

但我建议你看看这里

How do I intercept a method call in C#?

对于原始问题:

您无法覆盖此方法以让其他类使用您自己的类。

我的建议是在初始化Image之前创建“选择源”界面。因此,您可以选择初始化方法