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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
extern别名在C#中的作用是什么?_C#_.net_Namespaces - Fatal编程技术网

extern别名在C#中的作用是什么?

extern别名在C#中的作用是什么?,c#,.net,namespaces,C#,.net,Namespaces,为了解决C#中程序集之间的名称空间冲突,我给了其中一个别名NLog: 现在,我可以引用该程序集中的名称空间,如下所示: public class Logger : NLog::NLog.LogReceiverService { // ... } 但是,在我使用文件顶部的extern alias关键字之前,这不会编译: extern alias NLog; 我的问题: 外部别名关键字的作用是什么?NLog::NLog.LogReceiverService是否足以完全消除我所指的程序集别

为了解决C#中程序集之间的名称空间冲突,我给了其中一个别名
NLog

现在,我可以引用该程序集中的名称空间,如下所示:

public class Logger : NLog::NLog.LogReceiverService
{
   // ...
}
但是,在我使用文件顶部的
extern alias
关键字之前,这不会编译:

extern alias NLog;
我的问题:


外部别名
关键字的作用是什么?
NLog::NLog.LogReceiverService
是否足以完全消除我所指的程序集别名、命名空间和类型的歧义?

在引用上设置alias属性只会将其指定为该别名,而程序集引用的初始加载是作为运行时为项目完成的。为了在文件中使用该别名程序集引用,必须通过extern alias关键字指定要使用它,该关键字设置编译器指令以查找该别名

您可能会认为它们会有某种类型的全局别名,但我认为它们会强制使用显式别名,因为别名会受到性能影响

以下是有关extern alias的参考资料:

注意:是的,有许多StackOverflow文章以及博客文章概述了如何消除具有相同完全限定类型的两个程序集之间的歧义。他们基本上都说使用extern alias关键字,但没有说明原因。我的问题是为什么编译器需要extern alias关键字,而
别名::
应该足够了。