VB.NET命名空间缩写:如何在等效的C#代码中实现这一点
本文关键字:代码 这一点 实现 命名空间 NET 缩写 VB | 更新日期: 2023-09-27 18:23:44
我天生就是一名VB.NET程序员,很难弄清楚这一点。如有以下方面的帮助,我们将不胜感激。
我需要获得下面的C#代码(1)才能工作。等效的VB.NET运行得很好,但C#则不然。
请注意,(2)和(3)都可以工作,但这实际上是自动生成的代码,我需要VB.NET和C#版本尽可能相似。
-
这不会编译(
Engine
的完全限定名称为ThreeD.QVB.Engine
):using ThreeD.QVB; namespace QVBScript { public class ScriptCode { public void Main(ref Engine.QVBObjectsDictionary objects, Engine.Commands commands) { …
-
然而,这个确实有效:
//using ThreeD.QVB; // I'm instead using fully-qualified names in the method namespace QVBScript { public class ScriptCode { public void Main(ref ThreeD.QVB.Engine.QVBObjectsDictionary objects, ThreeD.QVB.Engine.Commands commands) { …
-
这也起作用:
using eng = ThreeD.QVB.Engine; namespace QVBScript { public class ScriptCode { public void Main(ref eng.QVBObjectsDictionary objects, eng.Commands commands) { …
在VB.NET中,如果名称空间的前半部分有import
,则只能引用后半部分。在C#中,你不能这样做。您必须具有完整命名空间的using
,或者完全限定您的类型名称。不同的语言,不同的规则。
在上一个示例中,您不需要使用别名。
using ThreeD.QVB.Engine;
namespace QVBScript
{
public class ScriptCode
{
public void Main(ref QVBObjectsDictionary objects, Commands commands)
{
UI.Output Output = (UI.Output)objects["Output"];
要记住的基本规则:
using A.B;
-
是否允许您引用命名空间
A
和A.B
中的类型,而无需完全限定它们的命名空间(同一文件中的所有位置)。 -
不允许通过从名称中省略
A.
或A.B.
部分来缩写A
或A.B.
的子命名空间的名称。
namespace A.B { … }
-
是否允许您引用命名空间
A
和A.B
中的类型,而无需完全限定它们的命名空间(在块内)。 -
允许您通过从名称中省略
A.
或A.B.
部分来缩写A
或A.B
的子命名空间的名称。
示例:
using System.Collections;
namespace A
{
class Top : IDisposable, // importing System.Collections also imports System
IEnumerable, // inside the imported namespace
System.Collections.Generic.IEnumerable<int>
{…} // ^ "using" does not permit namespace abbreviation
}
namespace A.B
{
class Middle : Top, // namespace A available inside namespace A.B
C.IBottom // namespace blocks permit namespace abbreviation
{…}
}
namespace A.B.C
{
interface IBottom {…}
}