【问题标题】:Why is generated override code for generic method incorrect?为什么为泛型方法生成的覆盖代码不正确?
【发布时间】:2010-08-17 14:42:40
【问题描述】:

我有一个抽象的泛型类

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 生成此代码?

【问题讨论】:

    标签: visual-studio-2010 optional-parameters


    【解决方案1】:

    澄清一下:

    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 中发现了一个错误 =)

    在代码生成方面总是存在边缘情况,我很久以前登录了one for Visual Basic 2005/2008,但由于它真的比较晦涩,因此解决了 WONT FIX。希望这个问题能得到解决!

    【讨论】:

    • 确实比我的整洁多了!
    • 哈哈 - 解决方法:0,关闭为:无法修复。倒霉。但是,是的,这并不是真正的问题。我只是想知道我是否遗漏了什么。还尝试了一些没有成功的变体,这就是这个问题在这里结束的方式:-) 干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多