我注意到很多东西来回的一件事是将使用语句放在C#代码文件中 - 无论是在最外层还是在命名空间内.我理解using语句的位置会影响该文件中引用的范围,但我不明白的是,在大多数情况下,有人会想要在其命名空间中使用它们的using语句.
在几乎所有情况下,单个文件中只存在一个名称空间声明,因此使用using语句的范围似乎/(是?)无效.如果一个人在同一个文件中放置了多个类型和多个命名空间,那么使用语句进行范围化就很有意义了,但即使在具有一个命名空间的文件中,我仍然会看到很多这种情况.为什么?
using System;
namespace MyNamespace
{
using System.Text;
public class MyClass {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
在整个项目中,看似不必要的一个例子是ASP.NET MVC源代码.
鉴于此声明:
using System;
using System.Collections;
using System.Collections.Generic;
namespace AProject.Helpers
{
public static class AClass
{
Run Code Online (Sandbox Code Playgroud)
和这个宣言
namespace AProject.Helpers
{
using System;
using System.Collections;
using System.Collections.Generic;
public static class AClass
{
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别吗?或者只是编码风格的差异?
我总是习惯于像第一个一样宣布我的课程,但最近注意到微软使用了第二个.
每次在保存后更改设计器中的值时,都会删除.designer.cs文件.
有谁能告诉我如何解决这个问题?
我正在学习MVC WebAPI,我正在学习一个教程,一切都很顺利,直到我看到以下内容:
namespace HelloWebAPI.Controllers
{
using HelloWebAPI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
public class ProductsController : ApiController
{}
Run Code Online (Sandbox Code Playgroud)
我们通常做的是在开头添加资源\ scope,如下所示:
using HelloWebAPI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace HelloWebAPI.Controllers
{
public class ProductsController : ApiController
{}
Run Code Online (Sandbox Code Playgroud)
我的主管告诉我它没关系,应该没问题,因为它是关于这个主题的官方MS教程.
**我想知道为什么这不重要,以便我对它有更好的理解?**
可能重复:
应该在命名空间内部或外部使用
我支持一些代码,这些代码在命名空间声明中包含了所有的using语句.这让我有点不舒服,但我不知道这是否应该关注与否.除了与通常的惯例相反之外,我无法想到一个直接的问题.
有什么不对的:
namespace myProject.controls
{
using System;
using System.Collections;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
Run Code Online (Sandbox Code Playgroud)
而不是更广泛使用:
using System;
using System.Collections;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace myProject.controls
{
Run Code Online (Sandbox Code Playgroud) 可能重复:
应该在命名空间内部或外部使用
是否有任何技术原因需要这样做
namespace Foo
{
using System;
using System.IO;
Run Code Online (Sandbox Code Playgroud)
而不是默认值
using System;
using System.IO;
namespace Foo
{
Run Code Online (Sandbox Code Playgroud) 我过去几个月一直在使用ReSharper,除了广告之外,如果没有它,我看不到自己编码.因为我喜欢生活在流血的"什么地狱出错"的边缘,所以我决定试试我的运气w /最新的ReSharper 4.5夜间版本.这一切都很好.
但是,我注意到using指令分组格式已经改变,我想知道哪个更接近一般标准:
[旧]
#region Using directives
using System.X;
using System.Y;
using System.Z;
using System.A;
#region
namespace X { ... }
Run Code Online (Sandbox Code Playgroud)
[新]
namespace X {
#region Using directives
using System.X;
using System.Y;
using System.Z;
using System.A;
#region
...
}
Run Code Online (Sandbox Code Playgroud)
除了延迟加载引用之外,它是否可以用于任何特殊目的?(正在阅读Scott Hanselman对此的看法@ http://www.hanselman.com/blog/BackToBasicsDoNamespaceUsingDirectivesAffectAssemblyLoading.aspx)
谢谢;
如果我有一个名称空间,如:
namespace MyApp.Providers
{
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着如果我创建具有相同命名空间的其他文件和类,则共享using语句,并且我不需要再次包含它们?
如果是的话,这不是一个管理上的头疼吗?
可能的重复:
Usings 应该在命名空间内部还是外部
因此,有两种方法可以让您使用与命名空间相关的语句。您可以将它们放在名称空间声明之外或内部。两种方法之间的优缺点是什么,通常首选哪种方法。
using System;
namespace MyNamespace
{
}
Run Code Online (Sandbox Code Playgroud)
或者:
namespace MyNamespace
{
using System;
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个解决方案Foo.添加了一个名为Foo.Common
Added a console app的类库,用于调用来自调用的库代码ConsoleApp.
我引用了Foo.CommonfromConsoleApp和typed:
using Foo.Common;
public class Program
{
CommonClass c = new CommonClass();
static void Main(string[] args)
{
}
}
Run Code Online (Sandbox Code Playgroud)
并得到这个:
Error 1 The type or namespace name '**Foo**' could not be found (are you missing a using directive or an assembly reference?) Z:\Foo\Solution1\ConsoleApplication1\Program.cs 3 11 ConsoleApplication1
我为什么要这个?
这是怎么回事?
c# ×9
coding-style ×4
namespaces ×4
.net ×2
conventions ×1
linq ×1
reference ×1
scope ×1
sql ×1
structure ×1
using ×1