通用函数重载

daj*_*ric 2 c# generics overloading

我有以下问题:

有几个颜色接口与基本接口IColor.

public interface IColor { }
public interface IColor3 : IColor { }
public interface IColor4 : IColor { }
Run Code Online (Sandbox Code Playgroud)

某些算法仅支持对某些颜色类型的处理:

    public static Image<TColor, byte> Bla<TColor>(this Image<TColor, byte> img, bool inPlace = true)
        where TColor : IColor4
    {
       //do something
    }

    public static Image<TColor, byte> Bla<TColor>(this Image<TColor, byte> img, bool inPlace = true)
        where TColor : IColor3
    {
       //do something
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我得到一个错误,即已经定义了具有相同参数的函数.我该如何解决这个问题?

Jon*_*zzi 7

方法的重载仅基于参数和名称.这意味着你编写一个复制方法而不是重载.

我建议您编辑此代码:

public static Image<IColor4, byte> Bla(this Image<IColor4, byte> img, bool inPlace = true)
{
   //do something
}

public static Image<IColor3, byte> Bla(this Image<IColor3, byte> img, bool inPlace = true)
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

要么:

public static Image<TColor, byte> Bla<TColor>(this Image<TColor, byte> img, bool inPlace = true)
    where TColor : IColor
{
    if(TColor == typeof(SomeSpecificType))
    {
        // do something specific here.
    }
}
Run Code Online (Sandbox Code Playgroud)