我使用的第三方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);
}
但是我不想这样做,我只是想禁止在指定的cs文件中使用第三方Speaker
或其他不需要更改当前代码的方式。< / p>
答案 0 :(得分:2)
如果您每次都懒于写Photon.Voice.Unity.Speaker
,则可以创建一个使用using
statement的别名:
using PhotonSpeaker = Photon.Voice.Unity.Speaker;
现在您可以写:
private void OnSpeakerCreated(PhotonSpeaker speaker)
{
speaker.gameObject.transform.SetParent(this.RemoteVoicesPanel, false);
}