我有一个情况,我想从这个函数返回的List <>
public DataTable GetSubCategoriesBySubCatID(Guid SubCategoryID)
所以,我想是
public List<SubCategories> GetSubCategoriesBySubCatID(Guid SubCategoryID)
我知道超载是不支持的返回类型的基础上而已,我只是想DONOT在两个功能重复相同的代码。
最新最好的方式实现这一目标,而不会影响其为第一功能保持真引用
给他们不同的名字:
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)
使用泛型像下面。
public T GetSubCategoriesBySubCatID<T>(Guid SubCategoryID)
{
T value = ...;
return value;
}
我会定义
public IEnumerable<SubCategories> GetSubCategoriesBySubCatID(Guid SubCategoryID);
实现类这种方法的是免费使用实现IEnumerable {子类别}任何集合或容器
可以做到的,这是怎么
正如许多人已经解释返回类型重载不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