重载仅返回类型的基础(overloading on basis of return type onl

2019-07-04 09:18发布

我有一个情况,我想从这个函数返回的List <>

public DataTable GetSubCategoriesBySubCatID(Guid SubCategoryID)

所以,我想是

public List<SubCategories> GetSubCategoriesBySubCatID(Guid SubCategoryID)

我知道超载是不支持的返回类型的基础上而已,我只是想DONOT在两个功能重复相同的代码。

最新最好的方式实现这一目标,而不会影响其为第一功能保持真引用

Answer 1:

给他们不同的名字:

public DataTable GetSubCategoryTableBySubCatID(Guid subCatID)

public List<SubCategory> GetSubCategoryListBySubCatID(Guid subCatID)

除了别的,这将使你更清楚哪种方法感兴趣,当你正在阅读的调用代码英寸

如果这些应该在一个共同的方式来实现,编写包含常见的核心私有方法,并从两者的公共方法调用它。 例如,你可以使用一个代表做了“我找到了一个结果,将其添加到您的收藏”的一部分,或者使用迭代器块:

// "action" will be called on each sub-category
private void FindSubCategoriesBySubCatID(Guid subCatID,
                                         Action<SubCategory> action)

private IEnumerable<SubCategory> FindSubCategoriesBySubCatID(Guid subCatID)


Answer 2:

使用泛型像下面。

    public T GetSubCategoriesBySubCatID<T>(Guid SubCategoryID)
    {
        T value = ...;
        return value;
    }


Answer 3:

我会定义

public IEnumerable<SubCategories> GetSubCategoriesBySubCatID(Guid SubCategoryID);

实现类这种方法的是免费使用实现IEnumerable {子类别}任何集合或容器



Answer 4:

可以做到的,这是怎么

正如许多人已经解释返回类型重载不C#的支持。 逸岸它是由CTS支持。 然而,使用界面,如果绝对的情景在你的应用需要,我们可以使用显式接口实现模拟返回类型的方法重载

我们可以定义具有相同的方法签名,但不同的返回类型如两个接口

Interface I1
{
    DataTable GetSubCategoriesBySubCatID(Guid SubCategoryID);
}

Interface I2
{
    List<SubCategories> GetSubCategoriesBySubCatID(Guid SubCategoryID);
}

我们定义的类将实施两个界面

public class CategoryFinder:I1, I2
{
     public DataTable GetSubCategoriesBySubCatID(Guid SubCategoryID) //Implicitly implementing interface 
     {   
          //processing
          return _dt; 
     }


     List<SubCategories> I2.GetSubCategoriesBySubCatID(Guid SubCategoryID) //explicit implementing interface
     {
           //processing
           return _list<>
     }
}

由于CategoryFinder类实现这两个相互矛盾的GetSubCategoriesBySubCatID我们必须明确地强制转换界面如下

CategoryFinder cf = new CategoryFinder();
cf.GetSubCategoriesBySubCatID(Guid SubCategoryID); // will call the implicit return type which is data table
((I1)cf).GetSubCategoriesBySubCatID(Guid SubCategoryID); // will return **I1** implementation i.e datatable
((I2)cf).GetSubCategoriesBySubCatID(Guid SubCategoryID); // will return **I2** implementation i.e list


文章来源: overloading on basis of return type only