c# - 如何解决C#中的类名冲突问题
问题描述
我使用不使用命名空间的第三方 dll,它包含一个名为Speaker
.
// Decompiled with JetBrains decompiler
// Type: Speaker
// Assembly: StreamSDK, Version=1.0.6782.19546, Culture=neutral,PublicKeyToken=null
// MVID: 82353EB3-505A-4A47-8EEB-ED74ED4FC9B9
// Assembly location: /Users/haha/test/Assets/_ThirdParty/SteamSDK/Core/XMLSerializer/StreamSDK.dll
public enum Speaker
{
remote,
local,
none,
}
我的本地项目在指定的命名空间下也有这个类名Photon.Voice.Unity;
。导入 dll 后,由于编译器将本地Speaker
视为第三方的Speaker
.
我已经在本地项目中使用了命名空间:
using Photon.Voice.Unity;
以下代码中发生错误:
private void OnSpeakerCreated(Speaker speaker)
{
speaker.gameObject.transform.SetParent(this.RemoteVoicesPanel, false);
}
错误:
error CS1061: 'Speaker' does not contain a definition for 'gameObject' and no accessible extension method 'gameObject' accepting a first argument of type 'Speaker' could be found (are you missing a using directive or an assembly reference?)
添加完整的命名空间后,代码就通过了。
private void OnSpeakerCreated(Photon.Voice.Unity.Speaker speaker)
{
speaker.gameObject.transform.SetParent(this.RemoteVoicesPanel, false);
}
但是我不想这样做我只是想禁止Speaker
在指定的cs文件中使用第三方或任何其他我不需要更改当前代码的方式。
解决方案
如果你只是懒得Photon.Voice.Unity.Speaker
每次都写,你可以创建一个别名来使用using
别名指令:
using PhotonSpeaker = Photon.Voice.Unity.Speaker;
现在你可以写:
private void OnSpeakerCreated(PhotonSpeaker speaker)
{
speaker.gameObject.transform.SetParent(this.RemoteVoicesPanel, false);
}
推荐阅读
- r - 无法获取有关化学品饮用水标准的公共数据 - “无法加载 HTTP 资源”错误
- reactjs - 如何添加 ads.txt
- postgresql - 复制的复制
- java - DexArchiveMergerException 程序类型已存在:aaa
- amazon-web-services - 如何将多个 SSH 密钥应用于 AWS Lightsail 实例
- android - 无法将安全规则级联到子集合+允许创建不起作用
- javascript - 在传单侧边栏中切换 GeoJSON 层
- batch-file - 批处理文件 Scipt 在 if 语句中一次性执行所有指令
- javascript - 当 HTML 表单输入字段为空时,Google Apps 脚本中的错误
- unity3d - 2 个关节 1 个对象