将命名空间/类添加到现有名称空间

罗丹

活跃的成员
加入
2015年4月7日
消息
41
编程经验
10+
我可能会以错误的术语搜索,或者在我看到它时,也许只是不认识答案。

我有类似的命名空间

thehardware.i2c.

我想为i2c添加类

thehardware.i2c.devices.

然后最终喜欢

thehardware.i2c.devices.temperature.
thehardware.i2c.devices.pressure.pressure.
等等。

但随着我添加到现有的I2C命名空间时不喜欢VS。如果我只是用

thehardware.devices.

一切都很好,我的课程出现了。我不想直接添加到I2C源文件,而是为每个设备添加一个新文件。

这是什么所谓的,我正在努力这样做,所以我可以搜索并实际得到结果吗?

谢谢!
 

罗丹

活跃的成员
加入
2015年4月7日
消息
41
编程经验
10+
实际上我刚才意识到了什么。当它实际上是一个在恒星里面的一个类时,我认为i2c是一个名称空间。这可能是我问题的根源。
 

罗丹

活跃的成员
加入
2015年4月7日
消息
41
编程经验
10+
是的。出于某种原因,我的大脑无法想出这些东西,直到我在一篇文章中写出来,然后几分钟后我想了。

我添加了一个名称空间I2C,并将I2C类重命名为I2CCMD。现在我可以以我想要的方式添加名称空间和类。
 

罗丹

活跃的成员
加入
2015年4月7日
消息
41
编程经验
10+
哦,我确实有一个真正的相关问题!

当我添加了如上所述的子命名空间时,我必须使用类名来前言实际命令(i2creadyte()等)。我想绕过双重I2C位i2ccd.i2creadyte()我可以通过制作每个实际命令在它自己的课堂上,但我想知道是否有一个不太打字的密集型方式?所以当我说的时候"使用mynamespace.i2c."我只能使用i2creadyte()而不为此有一个单独的课程?

希望这有意义。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,720
地点
悉尼,澳大利亚
编程经验
10+
您似乎有一些关于命名空间,类和方法实际的奇怪的想法。类是类型的描述。简单来说,类型可以具有数据(属性)和行为(方法)。行为不仅存在于它的本身,而且没有一种实际行为,所以你的请求具有不属于班级的方法无意义。

命名空间只是一种向逻辑组合相关类型的方式。例如,System.data命名空间包含与常规数据访问相关的.NET框架中的所有类型。在System.Data.SqlClient中包含与特定于SQL Server和System.Data.oledB相关的数据访问相关的所有类型,包含所有与OLE DB数据源的数据访问相关的类型。名称空间本身不存在;仅存在命名空间,如果存在它是它的成员的类型。正如我所说,命名空间是类型的逻辑分组。这意味着如果这些程序集每个包含作为该命名空间的成员的类型的声明,则相同的命名空间可以跨多个程序集传播。

在您的情况下,如果您有一个名为i2cradyte的方法,那么它必须是类型的成员,并且该类型必须是命名空间的成员。如果你想避免在任何地方拥有i2c,那就停止将其放在任何地方。如果您有一个名为mynamespace.i2c的命名空间,那么该命名空间真的必须命名为I2CCMD的类型?为什么不能只命名命令或命令或其他恰当是合适的?如果它已经存在于将与I2C相关的所有类型的名称空间中存在,为什么需要I2C以类型的名称?这是倍增的方法,即为什么要称之为I2CReadyte而不是readbyte?如果它是一种类型的成员,它是您知道专门针对I2C功能的命名空间的成员,为什么需要I2C以方法的名称,特别是如果它在类型的名称中也是如此?

也就是说,如果您希望避免键入的静态成员,那么您实际上可以导入该类型。例如,假设Somenamespace命名空间中的某个类型类中存在包含的doSomething方法。没有导入,你需要这样称呼它:
SomeNamespace.SomeType.DoSomething();

如果您导入命名空间,那么您不必限定类型:
using SomeNamespace;

'...

    SomeType.DoSomething();

如果导入类型,那么您不必限定方法:
using static SomeNamespace.SomeType;

'...

    DoSomething();

我建议小心。就个人而言,如果我正在制作很多静态呼叫而不是其他的,我只会这样做。否则,它会减少属于什么。 IntelliSense意味着他们类型的合格方法几乎繁重。
 
最佳 底部