gpt4 book ai didi

c# - 当两个类名冲突时 C# 如何选择

转载 作者:太空宇宙 更新时间:2023-11-03 17:00:58 25 4
gpt4 key购买 nike

我有以下两个文件:

IGlobalApiProvider.cs

using System.Collections.Generic;
using Vert.Slack;

namespace Vert.Interfaces
{
public interface IGlobalApiProvider
{
List<Im> ImList();
}
}

以及对应的实现:SlackApi.cs

using System.Collections.Generic;
using Vert.Interfaces;

namespace Vert.Slack
{
public class SlackApi : IGlobalApiProvider
{
public List<Im> ImList()
{
...
}
}
}

现在,Intellisense 告诉我,当我在 IGlobalApiProvider 中使用 IM 时,它正在解析为 Im,它在名为 < strong>RtmStart.cs 没有命名空间声明。当我在 SlackApi.cs 中使用 IM 时,它解析为 Vert.Slack.Im,它在文件的 Vert.Slack 命名空间中定义名为 Im.cs。奇怪的行为提醒我注意冗余定义,所以我删除了它并且一切正常。

但是,我对为什么 Visual Studio 在这两种方式中表现不同感到困惑。我可以看出在这两种情况下,某些东西正在以不同的模式扫描类名。我还可以看出,在同一 namespace 中使用与在使用 namespace 的类中使用似乎是触发器。我不知道是什么机制控制了这种行为背后的逻辑。

任何人都可以阐明这一点吗?

你看到的一切都包含在 Vert.dll 中,它由一个项目组成,Vert.csproj

Link to the four files mentioned in this post as they existed at the time of writing .

最佳答案

这与 globalVert.Slack 命名空间之间的区别有关。

编译器 寻找定义了正确类的最明确的命名空间。

在此示例中,当编译器在 IGlobalInterfaceProvider.cs 中查找 Im 的定义时,此文件中没有定义(或使用)包含类,但 Im 也在该文件中定义 - 在全局命名空间中声明。

当编译器在SlackApi.cs中查找Im的定义时,在显式Vert.Slack中找到Im 命名空间,并利用该类。

答案here是一个类似的主题,可能会提供更多见解。

关于c# - 当两个类名冲突时 C# 如何选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34281251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com