我有PCL类Image和类中的方法来加载图像:
public Image(string fileName) //constructor
{
//platform specific implementation
}
我是否可以编写另一个程序集来覆盖此方法(通过另一个程序集中的方法隐藏此方法 - 如TypeForwarding)。
一般情况下,我希望该用户选择: 图像组装和一些特定于平台的例如Image.Windows
我有什么方法可以做到吗? (一些解决方法?)
答案 0 :(得分:2)
[TypeForwardTo]用于隐藏东西,一旦程序执行并开始使用真实程序集,目标平台上不可用的声明。你不想隐藏,你想替换。
当然可能,您只需要一组程序集,其声明与引用程序集相同,但方法的工作方式不同,适合于它们运行的特定平台。
您确实遇到一个问题,请确保引用程序集与实现程序集完全相同。对于完全限定的程序集名称,您需要完全匹配,这是可行的,并且完全匹配每个类型和方法签名。那不可行。我们无法使用Microsoft用于在PCL中生成引用程序集的工具类型。你可以蹄,但是一个小错误,你很蠢。实际上,您必须创建自己的工具来仔细检查完全匹配。维护也很痛苦。
请注意,.NET中已有优秀的模式可以满足您的需求。使用接口。
答案 1 :(得分:1)
我做了一些类似的研究。
我发现这方面的信息很少,老实说,在.Net中实现起来真的很复杂。
但我建议你看看这里
How do I intercept a method call in C#?
对于原始问题:
您无法覆盖此方法以让其他类使用您自己的类。
我的建议是在初始化Image之前创建“选择源”界面。因此,您可以选择初始化方法