应该为同名元素做些什么

时间:2009-09-09 08:27:18

标签: .net namespaces

我的一个项目存在一个小问题,我有一个名为Image的实体,用于在我创建的CMS系统中存储有关上传图像的信息。

这隐藏了system.drawing.image这不是问题,直到我需要开始在使用这两个类的页面上进行图像处理。

在声明的那一刻,我Using Image = myCMS.Entities.Image; 所以在调用Image时我正在使用我的对象,但在调用system.drawing.image时我必须输入system.drawing.image

使用此类问题的最佳方法是什么?因为在开发这个应用程序时我没有考虑框架类名。

5 个答案:

答案 0 :(得分:4)

除了更改您的实体名称之外,您的选项实际上仅限于名称别名和/或完全限定两个冲突名称,正如您现在所做的那样。

我个人的偏好是在整个来源中完全限定两种类型名称。您当前的方法是混叠和合格的混合。您也可以将两种类型别名为:

using EntityImage = myCMS.Entities.Image;
using DrawingImage = System.Drawing.Image;

答案 1 :(得分:1)

虽然有点痛苦,但最好的策略是避免可能的名称冲突。在你的情况下你不能很好地重命名System.Drawing.Image,所以如果可能的话,考虑将你的Image类型重命名为更特定于你的对象模型的东西(可能是CmsImage或ImageEntity)。

这是.NET Design Guidelines

中的明确规则
  

不要提供与核心命名空间中的任何类型冲突的类型名称。

显然,你不必遵守这些规则,但总的来说,我发现它们提供了很好的建议。

答案 2 :(得分:0)

您可以使用以下内容:

using CmsImage = myCMS.Entities.Image;
using Image = System.Drawing.Image;

所以你明确区分了两者。

或者您像现在一样使用完全限定的命名空间,或者只是将您自己的Image类重命名为'CmsImage'(如果这对您有意义),但我会选择第一种方法。

答案 3 :(得分:0)

我想你需要指定名称空间限定类型名称的唯一时间是创建该类型的实例。因此,var是您的朋友:

var cmsImage = new myCms.Entities.Image();
var drawingImage = new System.Drawing.Image();

根据我的经验,使用using创建的别名非常难以理解,并且它们会使代码不那么清晰。

答案 4 :(得分:0)

我认为最好使用它们的全名,包括命名空间。这样,当其他人或将来你看代码时,就不会有混淆。