如何在C#中使用不同的参数类型重载方法

时间:2011-04-26 18:11:26

标签: c# overloading

我正在尝试使用相同数量的参数但不同类型重载C#中的方法。

private double scale(double value) 
{
    return value * 100 / scale;
}

private float scale(float value)
{
    return value * 100 / scale;
}

但我收到此错误

  

错误4类型'[className]'已经存在   包含'scale'的定义

注意:我在MVS 2008工作

谢谢。

5 个答案:

答案 0 :(得分:5)

此代码没有意义:      返回值* 100 /比例;

如果您的方法名称为scale,那么该行末尾的scale会有什么作用?

您的方法签名在语义上是正确的,因为这是完全合法的C#代码:

    private float scale(float input)
    {
        return input;
    }

    private double scale(double input)
    {
        return input;
    }

您的班级中似乎还有一个名为scale的字段或属性:

private float scale = 0.15f;

答案 1 :(得分:2)

对我来说,它抱怨你用作变量的比例。 你可以有这样的东西

    private double scale1 =  0.0d;
    private double scale(double value)
    {
        return value * 100 / scale1;
    }

    private float scale(float value)
    {
        return (float) (value * 100 / scale1);
    }

答案 2 :(得分:1)

您是否可以像调用方法一样调用成员变量?

float scale2;
private double scale(double value)
{
    return value * 100 / scale2;
}

private float scale(float value)
{
    return value * 100 / scale2;
}

这会编译,但您可能需要相同的返回类型。

答案 3 :(得分:1)

我认为这会给你带来麻烦。例如,如果参数是1.5,编译器将如何知道您是否传递floatdouble

除非你有特殊需要,否则我会坚持使用double

答案 4 :(得分:0)

您可以使用Generics。

\xd9\x86\xd8\xa8\xd9\x88\xd8\xaa

您可以使用float或double或任何结构替换private T scale<T>(T value) where T: struct { return value * 100 / scale; }