c# - 泛型函数重载

标签 c# generics overloading

<分区>

我有以下问题:

有几个颜色接口(interface)和一个基本接口(interface) IColor。

public interface IColor { }
public interface IColor3 : IColor { }
public interface IColor4 : IColor { }

有些算法只支持对某些颜色类型进行处理:

    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
    }

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

最佳答案

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

我建议您为此编辑代码:

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
}

或者:

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.
    }
}

关于c# - 泛型函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865343/

相关文章:

c# - ArgumentException:C# 中的 'Illegal characters in path'

java - 在不破坏构建的情况下将泛型引入 Java 代码

c# - 我应该使用泛型来简化我的配置提供程序类吗?

c# - 具有任意列和行的 Wpf DataGrid 数据绑定(bind)

C# NUnit 测试 : Mock a external DLL-Method who call a Socket connection to a extern Device

c++ - 调用模板函数而不是基类型的函数

c++ - 重载解析在 gcc 和 clang 之间得到不同的结果

c++ - 为什么 'operator<<(cout, double)' 不起作用?

c# - 如何让 entityFramework 在创建数据库之前询问我;

c# - Generics Fun : Where typeof(List<T>) ! = typeof(List<T>),并使用反射获取泛型方法,带有泛型参数