高分求助!c#命名空间问题!(搞了很久了,直接抄书啦!)

proyeah 2009-07-11 05:39:23
先抄书,《C#入门经典(第四版)》P40-P41:


要注意的是,名称是由命名空间唯一定义的。可以在LevelOne和LevelTwo名称空间中定义名称NameThree:

namespace LevelOne
{
// name "NameThree" defined
namespace LevelTwo
{
// name "NameThree" defined
}
}


这定义了两个不同名称LevelOne.NameThree和LevelOne.LevelTwo.NameThree,可以独立使用它们,互不干扰.


创建了名称空间后,就可以使用using语句简化对它们包含的名称的访问.实际上,using语句的意思是"我们需要这个空间中的名称,所以不要每次总是要求对它们分类".例如,在下面的代码中,LevelOne名称空间中的代码可以访问LevelOne.LevelTwo名称空间中的名称,而无须分类:

namespace LevelOne
{
using LevelTwo;
namespace LevelTwo
{
// name "NameTwo" defined
}
}

有时,与上面的NameThree示例一样,不用名称空间中的相同名称会发生冲突……(下文内容为空间别名,省略)


问题一:这定义了两个不同名称LevelOne.NameThree和LevelOne.LevelTwo.NameThree,可以独立使用它们,互不干扰.有时,与上面的NameThree示例一样,不用名称空间中的相同名称会发生冲突 是否矛盾了?为什么?





“这里有一点要注意:using语句本身不能访问里一个名称空间中的名称。”
问题二:那这道练习题怎样做?
在下面的代码中,如何引用名称空间fabulous中的名称great?
[code=C#]
namespace fabulous
{
//code in fabulous namespace
}
namespace super
{
namespace smashing
{
// great name defined
}
}
...全文
815 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainyxia 2009-11-06
  • 打赏
  • 举报
回复
错误 1 找不到类型或命名空间名称“MySpace”(是否缺少 using 指令或程序集引用?) D:\BegVCSharp\Exercises\number1\number1\Program.cs 15 13 number1
rainyxia 2009-11-06
  • 打赏
  • 举报
回复

16楼的代码我怎么不能调试呢? 全部报错? - -
shadow_2006 2009-07-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 k7ta 的回复:]
大致理解了下,应该是同一个问题。
就是在不用名空间下定义的名称,如LevelOne.NameThree和LevelOne.LevelTwo.NameThree可以互不干扰的使用,没有问题。
但是在第二个例子中,using LevelTwo以后,我们使用LevelTwo下定义的名称时,就不需要每次都写完整名空间的层次,也就是LevelOne.LevelTwo下的名称引入了LevelOne,那么两个原本不同层次中定义的名称如果相同,当然会发生歧义,就产生冲突了。
不知道你说的是不是这个问题,希望有所帮助^_^
[/Quote]
基础问题!多看书本!
shadow_2006 2009-07-12
  • 打赏
  • 举报
回复
16楼很强大!人家看你那么长就怕怕!
redleafe 2009-07-12
  • 打赏
  • 举报
回复
我的感觉:命名空间是为了简写调用而设的,命名空间相当于您的调用等的前缀。
不知道这种理解对不对。
kofxinlang 2009-07-12
  • 打赏
  • 举报
回复
学习
netstray 2009-07-12
  • 打赏
  • 举报
回复
学习来的哈
zhangze1986910 2009-07-12
  • 打赏
  • 举报
回复
学习来的
baetgc 2009-07-12
  • 打赏
  • 举报
回复
学习来

lsfv00011 2009-07-12
  • 打赏
  • 举报
回复
通俗一点。
你家你有孩子叫小明。
你在家叫小明。那肯定是叫你家的孩子。
但是你到街上叫小明。肯定有几个人同时应答。
如果你在街上说:xx村xx家的小明。那肯定是叫你家的孩子。
iloli 2009-07-12
  • 打赏
  • 举报
回复
16楼正解!

命名空间是名称的组织形式,如果要使用位于二个不同命名空间下的相同对象名的对象,必须用全名给出,以示区分,,using不using都要这么做。
fengjian_428 2009-07-12
  • 打赏
  • 举报
回复
不要读死书 自己多写写代码测一下
sl2161 2009-07-12
  • 打赏
  • 举报
回复
不好意思,代码里面插入颜色的没有正常显示
sl2161 2009-07-12
  • 打赏
  • 举报
回复
先给观点:
using的作用是为了简写,命名空间是便于分类

这里以一个HelloWorld的例子来讲使用using
首先建立一个Hello类,命名空间是MySpace

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

namespace MySpace
{
public class Hello
{
public Hello()
{

}

public void Say()
{
Console.WriteLine("Hello,World");
}

}
}


那么在测试类里面代码有两种写法
写法一:

using System;
using System.Collections.Generic;
using System.Text;
using MySpace;

namespace Ex_NameSpace
{
class Program
{
static void Main(string[] args)
{

Hello h = new Hello();
h.Say();

Console.ReadLine();

}
}
}


写法二:

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

namespace Ex_NameSpace
{
class Program
{
static void Main(string[] args)
{

MySpace.Hello h = new MySpace.Hello();
h.Say();

Console.ReadLine();

}
}
}

可以看出写法一使用using简写了代码

再写一个例子,来说说分类

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

namespace MySpace
{
public class Hello
{
public Hello()
{

}

public void Say()
{
Console.WriteLine("我有写数据的功能");
}

public void Write()
{
Console.WriteLine("我可以写数据");
}

}
}

namespace MySpace.ReadOnly{
public class Hello
{
public Hello()
{

}

public void Say()
{
Console.WriteLine("我只能读取,不能写");
}
}
}


这里面就有两个Hello类,分别属于两个不同的命名空间,第二就属于MySpace.ReadOnly
如果我们在测试类里面这样写

using System;
using System.Collections.Generic;
using System.Text;
using MySpace;
using MySpace.ReadOnly;

namespace Ex_NameSpace
{
class Program
{
static void Main(string[] args)
{

Hello h = new Hello();
h.Say();

Console.ReadLine();

}
}
}

也就是两个命名空间都using了,那么就会报错
代码只能这样写

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

namespace Ex_NameSpace
{
class Program
{
static void Main(string[] args)
{

MySpace.Hello h = new MySpace.Hello();
h.Say();

MySpace.ReadOnly.Hello hread = new MySpace.ReadOnly.Hello();
hread.Say();

Console.ReadLine();

}
}
}


可能你还有疑问,为什么要弄个ReadOnly命名空间,而不直接把第二个Hello类改成HelloReadOnly呢?
可以这么说,第二个叫HelloReadOnly是完全可以的。

举个简单的例子,.net开发里面简单可以分为WinForm和WebForm,在WinForm里面有TextBox,在WebForm里面也有TextBox,这两个TextBox是分别属于System.Windows.Forms命名空间和System .Web .UI .WebControls命名空间,如果没有命名空间的话,那我们就要分别为TextBox命名,一个叫WinFormTextBox,一个叫WebFormTextBox。
到了这里,不知道你有没有点明白……
keith.wu 2009-07-11
  • 打赏
  • 举报
回复
学习的···
flyingsky00 2009-07-11
  • 打赏
  • 举报
回复
namespace LevelOne
{
public class cla
{}
namespace LevelTwo
{
public class cla
{}
}
}
//
namespace newnamespace
{
using LevelOne;
public class newcla
{
cla ccc=new cla()(这里的类cla编译后会加上绝对的路径LevelOne.cla)
using LevelTwo;
cla ccc=new cla()//编译会报错,LevelOne和LevelTwo都有cla,编译器无法识别
//可以这样写
LevelTwo.cla ccc=new LevelTwo.cla ();

}


}
k7ta 2009-07-11
  • 打赏
  • 举报
回复
大致理解了下,应该是同一个问题。
就是在不用名空间下定义的名称,如LevelOne.NameThree和LevelOne.LevelTwo.NameThree可以互不干扰的使用,没有问题。
但是在第二个例子中,using LevelTwo以后,我们使用LevelTwo下定义的名称时,就不需要每次都写完整名空间的层次,也就是LevelOne.LevelTwo下的名称引入了LevelOne,那么两个原本不同层次中定义的名称如果相同,当然会发生歧义,就产生冲突了。
不知道你说的是不是这个问题,希望有所帮助^_^
十八道胡同 2009-07-11
  • 打赏
  • 举报
回复
你这么一断章取义,好难懂。。
十八道胡同 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wujinjian2008n 的回复:]
下班了,帮你顶顶
[/Quote]

礼拜6还上班。。
flybird066 2009-07-11
  • 打赏
  • 举报
回复
没太注意过这种问题,实际开发中不会这么命名吧?
加载更多回复(2)

110,536

社区成员

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

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

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