• 如何使用不同dll的相同namespace下的相同接口


    问题:

    程序里加载了2个dll,这2个dll里都声明了同样的命名空间(这个不违法),然后在这个同样的命名空间下,他俩又定义了同名的interface。

    然后我程序里直接using这个命名空间,使用这个interface的时候就有问题了,因为它已经被定义在2个地方了。

    有没有啥语法可以显示指出我使用哪个dll里的命名空间里的该类型?

    解决办法:

    1. 用alias。

    Main App:

    extern alias Lib1;
    extern alias Lib2;
    using System;
     
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine((new Lib1::MS.Lib.Class1()).Run());
                Console.WriteLine((new Lib2::MS.Lib.Class1()).Run());
            }
        }
    }

    主程序设置。

    Lib1:

    namespace MS.Lib
    {
        public class Class1
        {
            public string Run()
            {
                return "MS.Lib1.Class1Run().";
            }
        }
    }

    Lib 2:

    namespace MS.Lib
    {
        public class Class1
        {
            public string Run()
            {
                return "MS.Lib2.Class1Run().";
            }
        }
    }

    2. 用property DllImport如下:把Lab1 封到另一个namespace下。直接被主程序调用。


        [DllImport("Lab1.dll", EntryPoint = "ChangeWindowMessageFilter", SetLastError = true)]
            [returnMarshalAs(UnmanagedType.Bool)]
            private static extern bool _ChangeWindowMessageFilter(WM message, MSGFLT dwFlag);


  • 相关阅读:
    JDK11 | 第七篇 : ZGC 垃圾收集器
    JDK11 | 第六篇 : Epsilon 垃圾收集器
    JDK11 | 第五篇 : 启动单个Java源代码文件的程序
    JDK11 | 第四篇 : 增强API
    JDK11 | 第三篇 : 局部变量类型推断
    JDK11 | 第二篇 : JShell 工具
    JDK11 | 第一篇 : JDK11 介绍
    客户端负载均衡Ribbon之源码解析
    DockerSwarm 微服务部署
    DockerSwarm 集群环境搭建
  • 原文地址:https://www.cnblogs.com/riskyer/p/3320251.html
Copyright © 2020-2023  润新知