如何创建两个行为不同但接收相同数据类型的构造函数?

Ser*_*pia 4 .net c# constructor

public class Parser
{
    Downloader download = new Downloader();
    HtmlDocument Page;

    public Parser(string MovieTitle)
    {
        Page = download.FindMovie(MovieTitle);
    }

    public Parser(string ActorName)
    {
        Page = download.FindActor(ActorName);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个构造函数,允许其他使用此库的开发人员轻松创建一个Parser对象,并在创建它之后立即加载相关的HtmlDocument.

问题在于构造函数不能以相同类型的参数存在两次.当然,可以告诉两个参数之间的逻辑差异,但计算机不能.

怎么办呢?

Meh*_*ari 18

static改为使用几种方法:

public class Parser
{
    Downloader download = new Downloader();
    HtmlDocument Page;

    private Parser() { } // prevent instantiation from the outside

    public static Parser FromMovieTitle(string MovieTitle)
    {
        var newParser = new Parser();
        newParser.Page = newParser.download.FindMovie(MovieTitle);
        return newParser;
    }

    public static Parser FromActorName(string ActorName)
    {
        var newParser = new Parser();
        newParser.Page = newParser.download.FindActor(ActorName);
        return newParser;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Sergio,来自另一个类,你不会说'Parser parser = new Parser(actorName);`.您将通过调用静态方法来获取实例,`Parser parser = Parser.FromActorName(actorName);`使用提供的代码Mehrdad,从类外部获取实例的唯一方法是通过静态方法之一.这些静态方法将使用私有构造函数创建实例,然后将其返回到调用站点. (2认同)