.net 对于同名的元素应该做什么

.net 对于同名的元素应该做什么,.net,namespaces,.net,Namespaces,我有一个小问题,我的一个项目,我有一个实体称为图像,它是用来存储有关上传的图像在一个CMS系统中我创建的信息 这隐藏了system.drawing.image这不是一个问题,直到我需要在使用这两个类的页面上开始进行图像处理 目前在声明中,我使用Image=myCMS.Entities.Image 因此,在调用Image时,我使用的是我的对象,但在调用system.drawing.Image时,我必须键入system.drawing.Image 处理此类问题的最佳方法是什么?因为在开发此应用程序时

我有一个小问题,我的一个项目,我有一个实体称为图像,它是用来存储有关上传的图像在一个CMS系统中我创建的信息

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

目前在声明中,我使用Image=myCMS.Entities.Image 因此,在调用Image时,我使用的是我的对象,但在调用
system.drawing.Image
时,我必须键入
system.drawing.Image


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

您可以使用以下内容:

using CmsImage = myCMS.Entities.Image;
using Image = System.Drawing.Image;
using EntityImage = myCMS.Entities.Image;
using DrawingImage = System.Drawing.Image;
所以你对这两者有了明确的区分


或者像现在一样使用完全限定的名称空间,或者简单地将自己的图像类重命名为“CmsImage”(如果这对您有意义的话),但我会选择第一种方法。

除了更改实体名称之外,您的选项实际上仅限于名称别名和/或完全限定两个冲突的名称,就像你已经在做的那样

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

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

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

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

根据我的经验,使用
创建的别名很难理解,而且它们使代码不那么清晰。

我认为最好将它们与全名(包括名称空间)一起使用。这样,当其他人或未来的您查看代码时,就不会出现混淆。

虽然这有点痛苦,但最好的策略是避免可能的名称冲突。在您的情况下,您不能很好地重命名Syr.Dig.In图像,因此,如果可能的话,考虑将您的图像类型重命名为更具体的对象模型(也许CMSIMAGE或IMAGIONTION)。 这是一条明确的规则:

不要给出与核心名称空间中的任何类型冲突的类型名称


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

作为一个肮脏的解决方案,这是一个很好的选择,但我也同意Mark的看法,我应该这样做。因为我使用代码生成,通过code smith,我总是试图使创建实体的表非常具有描述性,但在处理将发生冲突的名称空间时,似乎需要包含更高级别的描述。感谢大家的输入。我确实从重命名实体名称的选项开始…:-)