Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_Overriding_.net Assembly_Obsolete - Fatal编程技术网

C# 防止在其他程序集中使用方法

C# 防止在其他程序集中使用方法,c#,.net,overriding,.net-assembly,obsolete,C#,.net,Overriding,.net Assembly,Obsolete,我们使用的第三方程序集的方法有问题。是否有某种方法可以提醒我们的开发人员不应该使用该方法,最好在编译时使用,但运行时也可以。类似于过时的属性,但适用于另一个程序集。我无法重写该方法,因为它不是虚拟的。我能看出这是可能的唯一方法是将API包装在您自己的程序集中,让开发人员使用您的程序集而不是提供的程序集 using MyAPI; public class MyWrapper { private MyAPI _api; public MyWrapper() {

我们使用的第三方程序集的方法有问题。是否有某种方法可以提醒我们的开发人员不应该使用该方法,最好在编译时使用,但运行时也可以。类似于过时的属性,但适用于另一个程序集。我无法重写该方法,因为它不是虚拟的。

我能看出这是可能的唯一方法是将API包装在您自己的程序集中,让开发人员使用您的程序集而不是提供的程序集

using MyAPI;

public class MyWrapper
{
    private MyAPI _api;

    public MyWrapper()
    {
       _api = new MyAPI(); //Especially if you want to do some inits
    }

    public void APIMethod()
    {
        _api.APIMethod();
    }
}
我使用相同的方法名,它将允许您的开发人员用新类替换对象的实例化,或者更厚颜无耻地调用相同的类并更改名称空间

然后,您可以省略有问题的方法或将其标记为过时

您甚至可以使用T4模板为您生成代码,以便在API更改时可以重新生成代码。如果你使用反射,你甚至不需要写T4

有关T4的nmore信息-


希望这是有用的。

@HimBromBeere他正在寻求一种方法,在他无法访问的第三方程序集中标记一个已过时的方法。据我所知,没有办法做到这一点。那么这里可能会有这样的回答:如果我包装好,我就只是在用一个问题换另一个问题。如果我创建了一个继承(未包装)该方法类的类,然后隐藏该方法,那么会出现什么问题。这太麻烦了吗?如果存在某种类型的转发会有帮助吗?@BSalita不确定用一个问题交换另一个问题是什么意思。。。通过这样做,您可以实现您想要的,如果您使用反射和代码生成,您只需要做一次。您不能重写,因为您指出要隐藏的方法不是虚拟的,所以恐怕您运气不好。