美文网首页
真会 C# 吗 11

真会 C# 吗 11

作者: JeetChan | 来源:发表于2019-06-29 08:57 被阅读0次

声明

本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大致和第 14 课—— 命名空间 对应。

本文主要包括以下内容:

  1. 命名空间

命名空间

命名空间是类型的域,类型通常被组织到层次化的命名空间中,使它们更容易查找且避免 了冲突。命名空间是类型名称的组成部分。命名空间独立于 Assembly,对成员的可见性也没有影响。

namespace 关键字

namespace 关键字定义了块{}里面类型的命名空间。命名空间中的点表示嵌套命名空间的层次结构。未在任何命名空间里定义的类型被称为驻留在全局命名空间中。

using 指令

using 指令可导入一个命名空间,允许你不需要类型的全名就可以使用该类型,可以在不同的命名空间中定义相同名称的类型。

using static

从 C#6 开始,不仅仅可以引入命名空间,还可以引入具体的类型,这就需要使用 using static 了。被引入类型的所有静态成员可被直接使用,无需使用类名。所有可访问的静态成员都会被引入,字段,属性,嵌套类型。也可用于 enum,这样的话它的成员就被引入了。如果多个 static 引入存在歧义的话,将会发生错误。

using static System.Console;
class Test
{
static void Main() { WriteLine ("Hello"); }
}

using static System.Windows.Visibility;
var textBox = new TextBox { Visibility = Hidden }; // XAML-style

命名空间里的规则

命名空间的作用范围

在外层命名空间声明的名称可以在内部的命名空间里直接使用,无需全名。如果想要引用命名空间层次结构下不同分支的类型,可以使用部分名称。

namespace Outer
{
class Class1 {}
namespace Inner
{
class Class2 : Class1 {}
}
}

namespace MyTradingCompany
{
namespace Common
{
class ReportBase {}
}
namespace ManagementReporting
{
class SalesReport : Common.ReportBase {}
}
}

名称隐藏

如果同一个类型名同时出现在外层和内层的命名空间里,那么,直接使用类型名的时候,使用的是内层的。

namespace Outer
{
class Foo { }
namespace Inner
{
class Foo { }
class Test
{
 Foo f1; // = Outer.Inner.Foo
Outer.Foo f2; // = Outer.Foo
}
}
}

重复的命名空间

可以重复声明命名空间,只要它们下面没有冲突的类型名就可以。

namespace Outer.Middle.Inner
{
class Class1 {}
}
namespace Outer.Middle.Inner
{
class Class2 {}
}

嵌套 using 指令

可以一个命名空间内嵌套 using 指令,可以让 using 的东西的作用范围限制在这个命名空间内。

namespace N1
{
class Class1 {}
}
namespace N2
{
using N1;
class Class2 : Class1 {}
}
namespace N2
{
class Class3 : Class1 {} // Compile-time error
}

为命名空间/类型起别名

引入命名空间之后,可能会导致类型名冲突,可以不引入完整的命名空间,只引入你需要的那个类型,然后给这个类型起一个别名。

using PropertyInfo2 = System.Reflection.PropertyInfo;
class Program { PropertyInfo2 p; }

命名空间的高级特性

Extern

Extern 别名允许你的程序引用两个全名相同的类型名,通常这两个类型来自不同的 Assembly。

命名空间别名限定符 Namespace alias qualifiers

内层命名空间的类型名会把外层命名空间下的类型名隐藏,有时即使使用全名也无法解决冲突。解决方法可合用 global 命名空间,extern alias。

C-Namespaces.png

参考

Namespaces (C# Programming Guide)

using directive (C# Reference)

相关文章

  • 真会 C# 吗 11

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 03

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 6 课...

  • 真会 C# 吗 04

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 7 课...

  • 真会 C# 吗 02

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 5 课...

  • 真会 C# 吗 05

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 8 课...

  • 真会 C# 吗 01

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 4 课...

  • 真会 C# 吗

    声明 计划写一个 C# 系列教程学习笔记。内容来自微软 MVP solenovex(https://www.cnb...

  • 真会 C# 吗 10

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 08

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 09

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

网友评论

      本文标题:真会 C# 吗 11

      本文链接:https://www.haomeiwen.com/subject/mkyucctx.html