论:命名空间,程序集和类

在给学员讲解命名空间,程序集和类间的关系的时候,发现普遍接受困难,于是想写一个这样的专题文章,今天终于有时间搞定.

讨论程序集、名称空间、类3者间的关系

程序集:可以理解为你看到的exe文件和dll文件,每个独立的文件都是一个程序集。
名称空间:为了解决类太多的时候导致的命名冲突问题,我们会把一些类放到同一个名称下面,这个名称就叫名称空间。
类必须在某单个名称空间里面.
尽管.net2.0引入了局部类(partial),因为csc编译时程序集不带partial类相关的信息,类还是必须属于单一程序集,且单一名称空间。
也就是说:partial是语法层面的,不是CLR的一部分!

类可以通过名称空间整理存储,引入partial关键字的.net2.0解决了类必须在一个cs文件内实现的诟病.

1. 一个程序集可以包含多个名称空间,简单的实现就是在一个cs文件里面包含多个namespace定义,如下代码
/**/ /*--===------------------------------------------===---
作者:许明会
日期:2008年1月18日 11:14:46
目的:在多个cs文件内实现单一namespace; 测试partiall 类.
尽管局部类可以在多个cs文件内,但这些cs文件必须编译为一个程序集

单程序集编译方法如下,你将获得3个类,其中ClassInSeperateAssembly类内有2个方法.
csc /t:library /out:OneAssemblyFromSeperateCs.dll OneNamespace_MoreCs01.cs OneNamespace_MoreCs.cs
--===------------------------------------------===---
*/

using  System;

namespace  xumh // 我们将在1个cs文件内实现多个namespace
{
    
//在程序集01内实现的完整类
    public class ClassInCs01
    
{
        
public void Display()
        
{
            Console.WriteLine(
"名称空间:xumh\t类:ClassInCs01");
        }

    }


    
//在程序集内实现的局部类,会有2个方法
    public partial class ParialClass
    
{
        
public void Display01()
        
{
            Console.WriteLine(
"名称空间:xumh\t类:ParialClass\t方法:Display01");
        }

    }

}


namespace  sunwp
{
    
public class NoUse
    
{
        
public void Display()
        
{
            Console.WriteLine(
"在同一cs文件,同一Assembly内实现的多个namespace");
        }

    }

}

/**/ /*--===------------------------------------------===---
作者:许明会
日期:2008年1月18日 11:14:46
目的:在多个cs文件内实现单一namespace; 测试partial 类.
尽管局部类可以在多个cs文件内,但这些cs文件必须编译为一个程序集

单程序集编译方法如下,你将获得3个类,其中ClassInSeperateAssembly类内有2个方法.
csc /t:library /out:OneAssemblyFromSeperateCs.dll 
OneNamespace_MoreCs01.cs OneNamespace_MoreCs02.cs
--===------------------------------------------===---
*/

using  System;

namespace  xumh
{
    
//在程序集01内实现的完整类
    public class ClassInCs02
    
{
        
public void Display()
        
{
            Console.WriteLine(
"名称空间:xumh\t类:ClassInCs02");
        }

    }


    
//在程序集内实现的局部类:2个方法
    public partial class ParialClass
    
{
        
public void Display02()
        
{
            Console.WriteLine(
"名称空间:xumh\t类:ParialClass\t方法:Display02");
        }

    }

}

/**/ /*--===------------------------------------------===---
作者:许明会
日期:2008年1月18日 11:14:46
目的:在多个cs文件内实现单一namespace; 测试partial 类.
尽管局部类)可以在多个cs文件内,但这些cs文件必须编译为一个程序集

但程序集时的编译方法:
csc /r:OneAssemblyFromSeperateCs.dll OneNamespace_MoreCs_APP.cs
--===------------------------------------------===---
*/

using  System;
using  xumh;

namespace  TestNameSpace_xumh
{
    
public class runMyApp
    
{
        
static void Main()
        
{
            ClassInCs01 c1 
= new ClassInCs01();
            ClassInCs02 c2 
= new ClassInCs02();

            ParialClass p 
= new ParialClass();
            c1.Display();
            c2.Display();
            p.Display01();
            p.Display02();
        }

    }

}

2. 一个名称空间也可以包含在多个程序集内,简单的实现就是在多个cs文件内部,有相同的namespace定义,如下代码
/**/ /*--===------------------------------------------===---
作者:许明会
日期:2008年1月18日 11:14:46
目的:每个cs文件作为一个程序集,通过namespace管理他们
尽管局部类可以在多个cs文件内,但这些cs文件必须编译为一个程序集

编译方法如下,你将获得2个命名空间,其中xumh空间内有2个类
csc /t:library OneNamespace_MoreAssembly01.cs 
--===------------------------------------------===---
*/

using  System;

namespace  xumh // 我们将在多个Assembly里面实现同一个名称空间xumh
{
    
//在程序集01内实现的完整类,尽管在不同的程序集内,但xumh空间内都可以调用
    public class ClassInAssembly01
    
{
        
public void Display()
        
{
            Console.WriteLine(
"名称空间:xumh\t类:ClassInAssembly01");
        }

    }

}


// 同一cs文件实现不同的namespace
namespace  sunwp
{
    
public class NoUse
    
{
        
public void Display()
        
{
            Console.WriteLine(
"在同一cs文件,同一Assembly内实现的多个namespace");
        }

    }

}

/**/ /*--===------------------------------------------===---
作者:许明会
日期:2008年1月18日 11:14:46
目的:每个cs文件作为一个程序集,通过namespace管理他们
尽管局部类可以在多个cs文件内,但这些cs文件必须编译为一个程序集

编译方法如下,你将获得2个命名空间,其中xumh空间内有2个类
csc /t:library OneNamespace_MoreAssembly02.cs
--===------------------------------------------===---
*/

using  System;

namespace  xumh // 我们将在多个Assembly里面实现同一个名称空间xumh
{
    
//在程序集01内实现的完整类
    public class ClassInAssembly02
    
{
        
public void Display()
        
{
            Console.WriteLine(
"名称空间:xumh\t类:ClassInAssembly02");
        }

    }

}

/**/ /*--===------------------------------------------===---
作者:许明会
日期:2008年1月18日 11:14:46
目的:在多个cs文件内实现单一namespace; 测试partial 类.
尽管局部类)可以在多个cs文件内,但这些cs文件必须编译为一个程序集

但程序集时的编译方法:
csc /r:OneNamespace_MoreAssembly01.dll,OneNamespace_MoreAssembly02.dll OneNamespace_MoreAssembly_APP.cs
--===------------------------------------------===---
*/

using  System;
using  xumh;

namespace  TestNameSpace_xumh
{
    
public class runMyApp
    
{
        
static void Main()
        
{
            ClassInAssembly01 a1 
= new ClassInAssembly01();
            ClassInAssembly02 a2 
= new ClassInAssembly02();

            a1.Display();
            a2.Display();
            Console.WriteLine(
"hello,world.");
        }

    }

}

3.类,必须在某单个名称空间里面。net1.1类必须在一个文件内实现,故必然在1个程序集内实现,必然在1个名称空间内实现。
尽管.net2.0引入了局部类(partial),使得1个类可在多个cs文件内实现,但因为程序集不含有局部类的元数据信息,一样必须将多个cs编译为1个程序集。

费了一个上午的时间,看来做一个书籍作者真的很不容易呀!


转载于:https://www.cnblogs.com/flaaash/archive/2008/01/18/1044313.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值