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

罗丹

活跃成员
已加入
2015年4月7日
留言内容
41
编程经验
10+
我可能搜索了错误的术语,或者只是在我看到答案时才不知道答案。

我有现有的名称空间,例如

硬件I2C

我想像这样向I2C添加类

硬件I2C设备

然后最终喜欢

硬件I2C设备温度
硬件I2C设备压力
等等。

但是当我添加到现有的I2C名称空间时,VS不喜欢。如果我只是用

硬件设备

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

我要这样做是什么意思,以便我可以搜索并实际获得结果?

谢谢!
 

罗丹

活跃成员
已加入
2015年4月7日
留言内容
41
编程经验
10+
其实我才意识到。当I2C实际上是TheHardware中的一个类时,我将其视为一个名称空间。那可能是我问题的根源。
 

罗丹

活跃成员
已加入
2015年4月7日
留言内容
41
编程经验
10+
是的。由于某种原因,我的大脑无法弄清楚这些事情,直到我在帖子中写出来,然后过了几分钟,我才弄清楚了。

我添加了一个命名空间I2C,并将I2C类重命名为I2CCmd。现在,我可以按照自己的方式添加名称空间和类。
 

罗丹

活跃成员
已加入
2015年4月7日
留言内容
41
编程经验
10+
哦,我确实有一个相关的问题!

当我如上所述添加一个子名称空间(I2CCmd)时,我必须在实际命令(I2CReadByte()等)的前面加上类名。我想避开双重I2C位I2CCmd.I2CReadByte(),可以通过使每个实际命令自己成为一个类来实现,但是我想知道是否有一种较少的打字密集型方法?所以当我说"使用MyNameSpace.I2C"我可以使用I2CReadByte()而不使用单独的类吗?

希望有道理。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
您似乎对实际的名称空间,类和方法有一些奇怪的想法。类是对类型的描述。简单来说,类型可以具有数据(属性)和行为(方法)。行为本身并不仅存在,没有一种类型可以实际表现为行为,因此,要求具有不属于类的方法的请求毫无意义。

命名空间只是将相关类型进行逻辑分组的一种简单方法。例如,System.Data命名空间包含.NET Framework中与常规数据访问相关的所有类型,而System.Data.SqlClient包含与特定于SQL Server的数据访问相关的所有类型,而System.Data.OleDb包含所有与常规数据访问相关的类型。与OLE DB数据源的数据访问相关的类型。命名空间本身并不存在;仅当存在名称空间的类型时,名称空间才存在。如我所说,名称空间是类型的逻辑分组。这意味着,如果每个程序集都包含属于该名称空间的类型的声明,则该名称空间可以分布在多个程序集中。

就您而言,如果您有一个名为I2CReadByte的方法,则它必须是类型的成员,并且该类型必须是名称空间的成员。如果要避免到处都有I2C,请停止将I2C放在任何地方。如果您有一个名为MyNameSpace.I2C的命名空间,那么该命名空间中的类型是否真的必须命名为I2CCmd?为什么不能仅将其命名为Command或Commands或其他合适的名称?如果它已经存在于将所有与I2C相关的类型进行分组的名称空间中,那么为什么在类型名称中需要I2C?这对于该方法来说是双重的,即为什么将其称为I2CReadByte而不是ReadByte?如果它是类型的成员,而该类型的成员是您专门用于I2C功能的名称空间的成员,那么为什么在方法名称中需要I2C,尤其是在类型名称中也是如此?

就是说,如果您希望能够避免限定某个类型的静态成员,则可以实际导入该类型。例如,假设在SomeNamespace命名空间的SomeType类中存在DoSomething方法。如果没有导入,则需要这样调用:
SomeNamespace.SomeType.DoSomething();

如果导入名称空间,则不必限定类型:
using SomeNamespace;

'...

    SomeType.DoSomething();

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

'...

    DoSomething();

我还是建议谨慎。就个人而言,只有在我进行大量静态调用而没有其他事情时,我才会这样做。否则,它使不清楚什么属于什么。 Intellisense意味着使用其类型的限定方法几乎不会繁重。
 
最佳 底部