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

本文关键字:参数 类型 方法 重载 | 更新日期: 2023-09-27 17:53:18

我试图在c#中重载一个方法,具有相同数量的参数,但不同的类型。

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

但是我得到了这个错误

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

注意:我在MVS 2008工作

谢谢。

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

这段代码没有意义:

return value * 100 / scale;

如果您有一个方法名称scale,那么scale在该行末尾做什么?

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

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

似乎你也有一个字段或属性命名为scale在你的类:

private float scale = 0.15f;

对我来说,这是在抱怨你使用的规模作为一个变量。你可以这样写

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

可以像调用方法一样调用成员变量吗?

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

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

我想这会给你带来麻烦。例如,如果参数是1.5,编译器如何知道你传递的是float还是double ?

我会坚持使用double,除非你在这里有特殊需要。

可以使用泛型

private T scale<T>(T value) where T: struct
{
    return value * 100 / scale;
}

您可以将T替换为float或double或任何结构体