我在命名空间下定义了一个用户控件ExpressionControl:
TriggerEditor.UserControls
我在命名空间下有一个表单“IfEditor”:
TriggerEditor.Forms
当我将一个控件实例添加到表单(命名为expCondition)时,在Designer中生成以下代码来创建控件:
this.expCondition = new TriggerEditor.UserControls.ExpressionControl();
这会导致以下编译错误:
The type name 'UserControls' does not exist in the type 'TriggerEditor.Forms.TriggerEditor'
我不明白为什么要查看“TriggerEditor.Forms.TriggerEditor”;这不是代码所说的。现在,我可以通过修改行手动解决此错误,删除“TriggerEditor”。在“TriggerControls”之前,如此:
this.expCondition = new UserControls.ExpressionControl();
这满足了编译器,但是每次我将ExpressionControl的实例添加到表单时,我显然不希望这样做。我该如何避免这种情况?
答案 0 :(得分:2)
看起来你可能在TriggerEditor
命名空间中有一个TriggerEditor.Forms
类;是这样的吗?
如果是这样,因为TriggerEditor
类在你当前的命名空间内,你“更接近”这个类,因此它正在寻找一个子类。
答案 1 :(得分:1)
避免对类和命名空间使用相同的名称!?
显然,在命名空间TriggerEditor.Forms
中,您在与IfEditor类相同的命名空间中有一个名为TriggerEditor
的类。
因此,在查找TriggerEditor.UserControls.ExpressionControl
时,编译器会查找TriggerEditor
类(位于相同名称空间中,因此更接近)而不是TriggerEditor
名称空间...
通常,为了避免这种情况,你会使用namespace alias qualifier,但是在Designer生成的类中,你无法真正控制它。