加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 没有’使用someNamespace’的var关键字

发布时间:2020-12-15 23:55:15 所属栏目:百科 来源:网络整理
导读:即使您没有在顶部包含必要的using声明,Visual Studio / intellisense如何知道如何处理声明为var的变量? 例如,我在不同的命名空间中定义了MyDomainObject类 如果我没有声明使用TheOtherNameSpace;在文件中,以下代码将无法编译: private void Foo(){ MyDomai
即使您没有在顶部包含必要的using声明,Visual Studio / intellisense如何知道如何处理声明为var的变量?

例如,我在不同的命名空间中定义了MyDomainObject类
如果我没有声明使用TheOtherNameSpace;在文件中,以下代码将无法编译:

private void Foo()
{
   MyDomainObject myObj = new MyDomainObject(); 
   // Doesn't know what this class is
}

但是如果我使用var

var myObj = new MyDomainObject();

这将编译,intellisense确切地知道我能用它做什么.

那么如何在没有使用的情况下知道它的类型是什么?

(另外,如果它知道没有使用,为什么我们需要使用?!)

解决方法

使用构造函数的示例将不起作用,但稍微更复杂的情况将会起作用.例如,假设您有三种类型:

>命名空间N1中的类Foo
>命名空间N2中的类Bar
>命名空间N3中的类Baz

现在假设Bar有一个返回Foo实例的方法:

public static Foo GetFoo() { ... }

这里,Bar.cs需要一个N1的using指令,除非它完整地指定了这个名字.

现在假设我们在Baz中有这个代码:

using N2;
...
var foo = Bar.GetFoo();

那会编译,但是

using N2;
...
Foo foo = Bar.GetFoo();

惯于.原因是只使用指令,以便编译器知道名称“Foo”的含义 – 它的完全限定名称是什么.在第一个片段中,Bar.GetFoo()被有效地声明为返回N1.Foo,因此编译器没问题.在第二个片段中,编译器首先看到“Foo”并且对N1一无所知,因此不知道如何查找它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读