VB.NET 命名空间缩写:如何在等效的 C# 代码中实现此功能?
我本质上是一名 VB.NET 程序员,但我很难弄清楚这一点。任何有关以下内容的帮助将不胜感激。
我需要让下面的 C# 代码 (1) 才能工作。 VB.NET 的等效项工作得很好,但 C# 却不行。
请注意,(2) 和 (3) 都可以工作,但这实际上是自动生成的代码,我需要 VB.NET 和 C# 版本尽可能相似。
这不会编译(
Engine
的完全限定名称是ThreeD.QVB.Engine
):使用 ThreeD.QVB; 命名空间 QVBScript { 公共类脚本代码 { 公共无效主要(参考Engine.QVBObjectsDictionary对象, Engine.Commands 命令) { ……
但是,这个 确实有效:
//使用ThreeD.QVB; // 我在方法中使用完全限定名称 命名空间 QVBScript { 公共类脚本代码 { 公共无效主要(参考ThreeD.QVB.Engine.QVBObjectsDictionary对象, ThreeD.QVB.Engine.Commands 命令) { ……
这也有效:
using eng = ThreeD.QVB.Engine; 命名空间 QVBScript { 公共类脚本代码 { public void Main(参考eng.QVBObjectsDictionary对象, eng.Commands 命令) { ……
I am a VB.NET programmer by nature and I am having a hard time figuring this out. Any help with the following would be appreciated.
I need to get the C# code (1) below to work. The VB.NET equivalent works just fine, but the C# does not.
Note that both (2) and (3) do work, but this is actually auto-generated code, and I need the VB.NET and C# versions to be as similar as possible.
This does not compile (the fully-qualified name of
Engine
isThreeD.QVB.Engine
):using ThreeD.QVB; namespace QVBScript { public class ScriptCode { public void Main(ref Engine.QVBObjectsDictionary objects, Engine.Commands commands) { …
However, this does work:
//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) { …
This works, too:
using eng = ThreeD.QVB.Engine; namespace QVBScript { public class ScriptCode { public void Main(ref eng.QVBObjectsDictionary objects, eng.Commands commands) { …
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 VB.NET 中,如果您对命名空间的第一部分有
导入
,则可以仅引用后半部分。在 C# 中你不能这样做。您必须有一个using
来表示完整的命名空间,或者完全限定您的类型名称。不同的语言,不同的规则。在最后一个示例中,您不需要使用别名。
In VB.NET if you have an
import
for the first part of a namespace, you can reference just the later half. In C# you cannot do this. You must have ausing
for the full namespace, or fully qualify your type names. Different languages, different rules.In your last example you do not need to use the alias.
要记住的基本规则:
using AB;
确实允许您从命名空间
A
引用类型并且AB
无需使用其命名空间(同一文件中的任何位置)完全限定它们。不允许通过省略
A
或AB
的子命名空间来缩写名称名称中的A.
或AB
部分。namespace AB { … }
确实允许您从命名空间
A
和引用类型 AB
无需使用其命名空间(块内)完全限定它们。确实允许您通过省略<来缩写
A
或AB
的子命名空间的名称code>A. 或AB
部分来自其名称。例子:
Basic rules to remember:
using A.B;
does allow you to refer to types from namespaces
A
andA.B
without fully qualifying them with their namespace (everywhere in the same file).does not allow you to abbreviate the names of sub-namespaces of
A
orA.B.
by omitting theA.
orA.B.
part from their names.namespace A.B { … }
does allow you to refer to types from namespaces
A
andA.B
without fully qualifying them with their namespace (inside the block).does allow you to abbreviate the names of sub-namespaces of
A
orA.B
by omitting theA.
orA.B.
part from their names.Example: