如何让Visual Studio Intellisense发现继承的子类?

7

我有一个场景,其中Visual Studio(2012)的Intellisense无法识别在继承类中定义的子类。最好通过一个简单的示例来演示:

public class Shape {

    public class SubShape {
    }

}

public class Circle : Shape {
}

我有一个形状类(Shape),其中有一个子形状子类(SubShape),以及一个从形状类继承的圆形类(Circle)。
如果我尝试使用new Circle.SubShape()实例化一个子形状实例,Visual Studio的智能感知不会显示任何结果,但是一切都可以正确构建且没有语法错误。
如果我使用new Shape.SubShape()引用基类中的类,则智能感知可以正常工作。如果首先省略new关键字,那么在输入Circle.时,SubShape将作为选项出现。
我使用的是Visual Studio 2012版本11.0.61030.00 Update 4
更新:我已禁用ReSharper,但如果我启用它并选择使用ReSharper的智能感知而不是Visual Studio的,则一切如预期般工作。

你试过用2013吗?我有2013(专业版)和Resharper,它可以像你在这里描述的那样工作。不确定是Reharper还是VS2013在执行。 - Daniel Kotin
谢谢!你能试着禁用 ReSharper 然后看它是否还能正常工作吗?我认为你可以通过 2012 版的“工具”->“选项”->“ReSharper”对话框轻松地做到这一点。如果我打开 ReSharper 并选择使用 ReSharper 的 Intellisense 而不是 VS 的,那么它也对我有效...所以在 2012 版中似乎是 Visual Studio 的一个 bug,而 ReSharper 得以修复它。 - Dave Lockhart
1
刚刚禁用了它,看起来这是 ReSharper 的一个功能 :(. 我回家后会用 VS2013 Ultimate 进行测试,看看它是否存在。 - Daniel Kotin
刚刚测试了一下,这是Resharper的功能。 - AgentFire
CodeRush也具有这个功能 :) - Ashley Medway
这不是偶然。无论哪个可怜的家伙有一天要维护你的代码,都会因为试图找回那个类而掉光头发。他会看着Circle.cs,却毫无希望地找不到它。避免使用类的真实名称是没有意义的,继承并不会改变它的名称。 - Hans Passant
1个回答

0

这可能是Intellisense的一个小bug,在VS2010中也会出现。

奇怪的是,声明一个变量“do”确实有Intellisense,这是两全其美的。

Shape.SubShape s;
Circle.SubShape s;

当键入时,将在点后列出子形状。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接