講一講 Namspace 和 Assembly 吧?

简叔 2003-08-02 08:46:54
小弟剛入門,請大佬們講一下這倆到底是啥玩意兒 ? 謝謝!
...全文
33 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuterain 2003-08-19
  • 打赏
  • 举报
回复
mark
chang110cn 2003-08-05
  • 打赏
  • 举报
回复
UP
简叔 2003-08-05
  • 打赏
  • 举报
回复
謝謝夕夕公主!
简叔 2003-08-02
  • 打赏
  • 举报
回复
謝謝各位,小弟也找了一點資料,放這里供大家參考
http://msdn.microsoft.com/vstudio/using/migrate/default.aspx?pull=/library/en-us/dndotnet/html/assenamesp.asp
xixigongzhu 2003-08-02
  • 打赏
  • 举报
回复
程序集是 .NET Framework 编程的基本组成部分。程序集执行以下功能:

包含公共语言运行库执行的代码。如果可移植可执行 (PE) 文件没有相关联的程序集清单,则将不执行该文件中的 Microsoft 中间语言 (MSIL) 代码。请注意,每个程序集只能有一个入口点(即 DllMain、WinMain 或 Main)。
程序集形成安全边界。程序集就是在其中请求和授予权限的单元。有关应用于程序集的安全边界的更多信息,请参见程序集安全注意事项。
程序集形成类型边界。每一类型的标识均包括该类型所驻留的程序集的名称。在一个程序集范围内加载的 MyType 类型不同于在其他程序集范围内加载的 MyType 类型。
程序集形成引用范围边界。程序集的清单包含用于解析类型和满足资源请求的程序集元数据。它指定在该程序集之外公开的类型和资源。该清单还枚举它所依赖的其他程序集。
程序集形成版本边界。程序集是公共语言运行库中最小的可版本化单元,同一程序集中的所有类型和资源均会被版本化为一个单元。程序集的清单描述您为任何依赖项程序集所指定的版本依赖性。有关版本控制的更多信息,请参见程序集版本控制。
程序集形成部署单元。当一个应用程序启动时,只有该应用程序最初调用的程序集必须存在。其他程序集(例如本地化资源和包含实用工具类的程序集)可以按需检索。这就使应用程序在第一次下载时保持精简。有关部署程序集的更多信息,请参见部署应用程序。
程序集是支持并行执行的单元。有关运行多个程序集版本的更多信息,请参见程序集和并行 (side-by-side) 执行。
程序集可以是静态的或动态的。静态程序集可以包括 .NET Framework 类型(接口和类),以及该程序集的资源(位图、JPEG 文件、资源文件等)。静态程序集存储在磁盘上的可移植可执行 (PE) 文件中。您还可以使用 .NET Framework 来创建动态程序集,动态程序集直接从内存运行并且在执行前不存储到磁盘上。您可以在执行动态程序集后将它们保存在磁盘上。

有几种创建程序集的方法。您可以使用过去用来创建 .dll 或 .exe 文件的开发工具,例如 Visual Studio .NET。您可以使用在 .NET Framework SDK 中提供的工具来创建带有在其他开发环境中创建的模块的程序集。您还可以使用公共语言运行库 API(例如 Reflection.Emit)来创建动态程序集。

以上来自.net文档,如果是2003版本,链接为:
Assembly:
ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconassembliesoverview.htm
如果是别的版本,请截取cpguidenf/html/cpconassembliesoverview.htm这一段
Namespace:
ms-help://MS.NETFrameworkSDKv1.1.CHS/csspec/html/vclrfcsharpspec_3_8.htm
如果是别的版本,请截取csspec/html/vclrfcsharpspec_3_8.htm这一段

如果要参考示例,请看Assembly的具体描述:
ms-help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfSystemReflectionAssemblyClassTopic.htm
包括方法和属性的描述和使用。
xixigongzhu 2003-08-02
  • 打赏
  • 举报
回复
C# 程序是利用命名空间组织起来的。命名空间既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法)。

using 指令是用来使命名空间用起来更方便。

C# 程序中的若干上下文要求指定命名空间名称或类型名称。两种形式的名称都写为以“.”标记分隔的一个或多个标识符。

namespace-name:(命名空间名称:)
namespace-or-type-name(命名空间或类型名称)
type-name:(类型名:)
namespace-or-type-name(命名空间或类型名称)
namespace-or-type-name:(命名空间或类型名称:)
identifier(标识符)
namespace-or-type-name . identifier(命名空间或类型名称 . 标识符)
“类型名”是一个“命名空间或类型名称”,它引用一个类型。需遵循下述的决策:“类型名”的“命名空间或类型名称”必须引用一个类型,否则将发生编译时错误。

“命名空间名称”是一个“命名空间或类型名称”,它引用一个命名空间。需遵循下述的决策:“命名空间名称”的“命名空间或类型名称”必须引用一个命名空间,否则将发生编译时错误。

“命名空间或类型名称”的含义按下述步骤确定:

1.如果“命名空间或类型名称”由单个标识符组成:
a.如果“命名空间或类型名称”出现在类或结构声明体内,则从该类或结构声明开始查找,遍及每个封闭它的类或结构声明(若它们存在的话),如果具有给定名称的成员存在、可访问且表示类型,则“命名空间或类型名称”引用该成员。请注意,当确定“命名空间或类型名称”的含义时,会忽略非类型成员(常数、字段、方法、属性、索引器、运算符、实例构造函数、析构函数和静态构造函数)。

b.否则,从发生“命名空间或类型名称”的命名空间开始,遍及每个封闭它的命名空间(若它们存在的话),直至全局命名空间结束,对下列步骤进行评估,直到找到实体:

c.如果命名空间包含具有给定名称的命名空间成员,则“命名空间或类型名称”引用该成员,并根据该成员归为命名空间或类型类别。

d.否则,如果命名空间有一个对应的命名空间声明,且“命名空间或类型名称”出现的位置包含在该命名空间声明中,则:
如果该命名空间声明包含一个将给定名称与一个导入的命名空间或类型关联的 using 别名指令,则“命名空间或类型名称”引用该命名空间或类型。

否则,如果该命名空间声明中有一个“using 命名空间指令”,它导入的那个命名空间内含有一个与给定名称完全匹配的类型,则“命名空间或类型名称”引用该类型。

否则,如果该“using 命名空间指令”导入的命名空间包含多个具有给定名称的类型,则“命名空间或类型名称”就被认为是含义不清的,将导致发生错误。

e.否则,“命名空间或类型名称”就被认为是未定义的,导致发生编译时错误。

2.否则,“命名空间或类型名称”的形式为 N.I,其中 N 是由除最右边的标识符以外的所有标识符组成的“命名空间或类型名称”,I 是最右边的标识符。N 最先按“命名空间或类型名称”解析。如果对 N 的解析不成功,则发生编译时错误。否则,N.I 按下面这样解析:
a.如果 N 是一个命名空间而 I 是该命名空间中可访问成员的名称,则 N.I 引用该成员,并根据该成员归为命名空间或类型类别。

b.如果 N 是类或结构类型而 I 是 N 中可访问类型的名称,则 N.I 引用该类型。

c.否则,N.I 是无效的命名空间或类型名称并将发生编译时错误。

dahuzizyd 2003-08-02
  • 打赏
  • 举报
回复
关于命名空间的概念,你可以在帮助里找到:
Visual Basic 和Visual C# /参考/C#语言规范/命名空间 主题。

Assembly 关键字指示在源文件开头的属性块适用于整个程序集,而不仅仅适用于当前模块。

使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。
定义一个 Assembly,它是可重用、无版本冲突并且可自我描述的公共语言运行库应用程序构造块。
HenanBoy 2003-08-02
  • 打赏
  • 举报
回复
帮助你up我也想知道亚
chagel 2003-08-02
  • 打赏
  • 举报
回复
看了《Applied ...》就清楚了:-)
xixigongzhu 2003-08-02
  • 打赏
  • 举报
回复
实际上,定义命名空间主要从系统架构考虑,比如微软.net的API中,关于文件处理的类都定义在IO包,关于集合的类定义在Collections,关于国际化的类定义在Globalization,而基础类定义在System等等,针对这些类要完成的功能来分包定义。其实没有命名空间照样可以,只是这么多的类,你要找的话就有点麻烦了。而且用命名空间的话就可以定义一些名字一样但命名空间不一样的类。

程序集是微软在面向对象语言领域提出的一种新的概念。它是.NET Framework 编程的基本组成部分。你运行一个简单的控制台程序,这个程序编译生成的exe文件便是一个程序集。

还是举个例子把:
using System;
public class testcs {
public static void test() {
Console.WriteLine("test method.........");
}
}
把这个文件编译:csc /t:library /out:test.dll test.cs
然后这样用:
LoadFrom方法从指定的文件名下载程序集,文件名可以带路径。程序集必须下载才能用。你在运行一个exe文件时,系统自动下载与这个程序集有关联的所有程序集;也可以用Load方法,参数为这个程序集的全名(也就是程序集的标识:程序集的标识由简单名称、版本号、加密密钥对和支持的区域性组成。简单名称是非加密名称,这一点与强名称不同。强名称是由加密的公钥和私钥对来确保安全性的程序集名称。)
GetTypes()方法返回这个程序集定义的所有的类,也可以用GetType方法,参数为你想要得到的类型的名字;
GetMembers是Type里的方法,得到这个类型里定义的成员,可以指定条件,具体请看Type的GetMembers的文档;
Invoke是MethodInfo的方法,调用这个方法。

using System;
using System.Reflection;

public class testcs {
public static void Main() {
Assembly ass = Assembly.LoadFrom("test.dll");
Type[] t = ass.GetTypes();
for (int i = 0; i < t.Length; i++) {
MemberInfo[] mi = t[i].GetMembers(BindingFlags.Public|BindingFlags.Static);
Console.WriteLine(mi[i]);
if (mi[i] is MethodInfo) {
((MethodInfo) mi[i]).Invoke(null,null);
}
}
}
}
整个Reflection包和System.Type都与Assembly密切联系,可以看相关的文档加深理解。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧