标题:C#中的 命名空间, 类名, 文件名 都是啥关系?
只看楼主
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:1 
是在解决方案的那个窗体里面的命名空间,就是你添加一个类的那地方
2013-03-21 19:10
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
以下是引用yhlvht在2013-3-21 19:10:15的发言:

是在解决方案的那个窗体里面的命名空间,就是你添加一个类的那地方
谢谢 yhlvht 老师!!!

再求教您:
1. 也就是说,如果添加了 Person.cs文件,手工在编代码上将命名空间修改为"AsiaPeople",则在“解决方案软件包”里是没有名称为“AsiaPeople”的命名空间文件夹 或 文件名的,对吗?

2. 而引用在"AsiaPeople"命名空间中的方法Work(),必须要加上AsiaPeople.Work(),而不是Person.Work()。

以上理解,对吗?

谢谢yhlvht 老师!
2013-03-21 19:52
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:2 
1 理解完全正确
2 调用方法,只是找到路径就对了,方法只能写在类中,肯定是 类名.方法名,不可能是 命名空间名.方法名,而类的全路径是 命名空间名.类名,所以调用方法为 命名空间名.类名.方法名,一般我们会在类中添加using 命名空间名,所以在类中只用写 类名.方法名
2013-03-21 20:46
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
十分感激 yhlvht 老师的 讲解指导!!!
2013-03-22 01:06
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
以下是引用yhlvht在2013-3-21 20:46:23的发言:

1 理解完全正确
2 调用方法,只是找到路径就对了,方法只能写在类中,肯定是 类名.方法名,不可能是 命名空间名.方法名,而类的全路径是 命名空间名.类名,所以调用方法为 命名空间名.类名.方法名,一般我们会在类中添加using 命名空间名,所以在类中只用写 类名.方法名

再请教 yhlvht老师:

1.关于12楼 的“如果添加了 Person.cs文件,手工在编代码上将命名空间修改为"AsiaPeople",”,这样更改命名空间的名称没有任何意义,对吗?因为引用该命名空间(AsiaPeople)中的方法Work(),是按 Person.Work()来引用的,对吗?

2. 那么 using 之后,如何写呢,using Person.AsiaPeople ?, 还是using Person ?

感谢yhlvht老师!!!
2013-03-22 13:30
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:3 
命名空间名,类名,都只是名称而已,名称取得再漂亮,对编程也没有实质的帮助
新建一个命名空间A,在A命名空间下新建一个类a,类a里面创建Work()方法.

如果用到Work()方法的地方,也同属于命名空间A,也就是说在命名空间A下面新建类b,类b要使用Work()方法, a a1 = new a(); a1.Work();
如果用到Work()方法的地方,不属于命名空间A,假如在命名空间B的一个类中要使用命名空间A下面a类中的Work()方法,在引用已添加的情况下
using A

a a1 = new a();
a1.Work();
或不using A
A.a a1 = new A.a();
a1.Work();

现在,手动将a类中的命名空间改为AA

在同一命名空间内的类b,要使用Work()方法
using AA

a a1 = new a();
a1.Work();

AA.a al = new AA.a();
a1.Work();

在命名空间B中使用Work()方法,在引用已添加的情况下

using AA

a a1 = new a();
a1.Work();

AA.a al = new AA.a();
a1.Work();
这里跟上面在类b使用的方法一样,只是类b跟类a在同一命名空间下,所以无需添加引用,而不是同一个命名空间的,需要添加引用
2013-03-22 15:10
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
谢谢 yhlvht 老师 耐心 讲解!!!

还不太明白。能用俺的12楼 和 15楼的 例子讲解吗,俺的迟钝脑袋好理解些。羞愧啊!

多谢您了!
2013-03-22 16:57
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:2 
如果你是用vs2005或2008,你可以压缩你的项目文件夹,然后添加附件,我可以下载来看看
如果你是vs2010或2012,那把代码贴出来吧.
我现在只知道你有一个Person类,然后Person类的命名空间被改为了AsiaPeople,那你新建Person类的时候原本的命名空间叫什么,Work()是写在哪个类里的,你要在哪个命名空间下的哪个类中,调用Work()方法
2013-03-22 18:43
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
感谢 yhlvht 老师!!!

按照您的指导,俺写了代码:

步骤如下:

创建 解决方案:NameSpaceTest
创建 类库文件:Person.cs
在 Person.cs 编程序 里 - 更改 命名空间 名称 为:namespace AsiaPeople
在 Program.cs 编程序 里 - 添加:using AsiaPeople;(注:不添加这样命名空间,则在实例化Person类时,出现红线错误),并实例化Person类,调用Work()方法

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AsiaPeople
{
    class Person
    {
        public void Work()
        {
            Console.Write("工作快乐");
        }
    }
}

-------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AsiaPeople;

namespace NameSpaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.Work();
            Console.Read();
        }
    }
}
2013-03-22 21:04
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
从19楼的实践,得到的文件名称有:

“NameSpaceTest”
“Person”
“Program”

但是 没有 名称为 “AsiaPeople” 的 文件。

我的问题是:如何查找到 Work()的 命名空间“AsiaPeople”?
因为在 Program.cs中 调用 Work()时,必须添加 using AsiaPeople,否则无法实例化 Person类,也就无法调用Work()。

不知我说清楚问题吗? 请多包涵俺的无知!

感谢yhlvht 老师!!!
2013-03-22 21:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-401459-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.415869 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved