重载没有参数的方法

时间:2017-06-27 12:23:34

标签: c# asp.net

我有两个方法的实现,在两个实现上应该做几乎相同的事情。

第一个使用选定的数据绑定页面上的ASP GridView控件:

// Bind the GridView with the data.
private void LoadArticles()
{
    List<ListArticleViewModel> model = new List<ListArticleViewModel>();

    // Query the database and get the data.

    GridView1.DataSource = model;
    GridView1.DataBind();
}

第二个实现是返回一个与Enumerable具有相同数据的列表:

private IEnumerable<ListArticleViewModel> LoadArticles()
{
    List<ListArticleViewModel> model = new List<ListArticleViewModel>();

    // Query the database and get the data.

    return model.AsEnumerable();
}

显然,超载在这里不起作用,因为签名不会区分返回类型。

请参阅:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/methods

  

方法的返回类型不是方法签名的一部分,用于方法重载。

这使我陷入了一些困境,因为我实际上并不需要这些参数,所以我如何重载它并使其工作?

我是否应该为方法使用不同的名称?

2 个答案:

答案 0 :(得分:3)

从技术角度来看,重载与应用程序的工作方式无关。除了开发人员可读性之外,没有任何理由想要使用几种不同的方法来使用相同的名称。

您可以将这些方法命名为Superman()Batman(),但这不会改变应用程序的工作方式。就编译器而言,这些名称无关紧要。

因此,对您的问题的简短回答是:不要给这些方法指定相同名称!
特别是如果他们做了不同的事情,只会给他们带来相同的名字,从而增加了混乱。

答案 1 :(得分:0)

如您所知,重载方法是什么以及如何用C#等OOP语言编写它们。您为自己创建的问题是由于不正确使用OOP。 OOP所说的一个方法就是应该执行唯一的方法。

但是你在方法中做了两件事

private void LoadArticles()
{
   //Load data
    List<ListArticleViewModel> model = new List<ListArticleViewModel>();

    //Bind loaded Data
    GridView1.DataSource = model;
    GridView1.DataBind();
}

显然,你在一个方法中加载和绑定了两件事。 OOP不建议。相反,您应该只返回该方法的数据

public IEnumerable<ListArticleViewModel> LoadArticles()
{
    List<ListArticleViewModel> model = new List<ListArticleViewModel>();

    // Query the database and get the data.

    return model.AsEnumerable();
}

现在您可以在任何地方使用上述公共方法。 (如果您想考虑您的要求,可以更改访问修饰符)

现在通过上面的实现,您可以将该方法称为

var dataSource = new Article().LoadArticles();
GridView1.DataSource = dataSource;
GridView1.DataBind();

我假设您的LoadArticles方法是在Article类中编写的,该类位于全局命名空间内,作为您的调用代码。

如果你不喜欢这种方法,那么你也无法通过使用方法重载方法解决问题,同样的返回类型和两种方法都没有输入参数。相反,你可以重命名其中一个方法,然后就可以开始了。