2

我有一个抽象的泛型类

public abstract class Foo<TType>

用抽象方法

public abstract object DoSomething(TType arg = default(TType)) {}

现在,继承的类

public class BabyFoo : Foo<string>

当我想覆盖 DoSomething 并开始输入“覆盖”以让智能感知/生成器编写我期望的方法框架时

public override object DoSomething(string arg = default(string))

甚至

public override object DoSomething(string arg = null)

但它确实想出了

public override object DoSomething(string arg = default(TType))

我最初的想法是这是一个 VS2010 错误,因为可选参数对 c# 来说是新的,但是任何人都可以告诉我是否有真正的原因(引用类型与值类型??)IDE 生成此代码?

4

1 回答 1

4

只是为了澄清:

public abstract class Foo<TType>
{
    public abstract object DoSomething(TType arg = default(TType));
}

public class BabyFoo : Foo<string>
{
    // Expected:
    public override object DoSomething(string arg = default(string))
    // Actual:
    public override object DoSomething(string arg = default(TType));
}

除非我遗漏了什么,否则它只是 Visual Studio IDE / code-gen 中的一个错误。将方法签名更改为“预期”会导致代码可以编译,因为“实际”签名由于明显无效而拒绝编译。

尝试了几种不同的类型TType以及诸如where TType : new()约束之类的东西后,我无法让 VS 使用您的DoSomething方法生成有效代码。

恭喜 - 您(可能)在 Visual Studio 中发现了一个错误 =)

在代码生成方面总是有边缘情况,我很久以前为 Visual Basic 2005/2008 记录了一个,它被解决了 WONT FIX,因为它相对来说是一个非常晦涩的问题。希望这个会得到修复!

于 2010-08-17T14:51:44.467 回答