参考类

时间:2018-05-16 17:35:01

标签: c#

原谅我有一个奇怪的头衔,但是我在正确命名时遇到了很大的问题。

我遇到了LoginPage类的问题:

public class LoginPage : PageBase
{
    private static readonly By IsLoadedLocator = By.Id("logo");

    public LoginPage(IWebDriver webDriver) : base(webDriver)
    {
        if (!IsLoaded()) throw new NoSuchElementException("Login page is not loaded");
    }

    // (1) This method
    public LoginFormComponent GetLoginFormComponent()
    {
        var component = new LoginFormComponent(this);
        return component.IsLoaded() ? component : null;
    }

    public override By GetIsLoadedLocator()
    {
        return IsLoadedLocator;
    }
}

标有(1)的方法。究竟发生了什么,LoginFormComponent是一个类。我们根据不同的课程创建方法,这样做的目的是什么?

第二个问题

var loginPage = new LoginPage(driver);

如果loginPage是可变的,我们正在初始化一个对象,但为什么它没有以正常方式完成,如:

LoginPage loginPage = new LoginPage(driver)

2 个答案:

答案 0 :(得分:0)

第一个问题:

public LoginFormComponent GetLoginFormComponent()
{
   // Create an instance of LoginFormComponent
   var component = new LoginFormComponent(this);
   // Return component if IsLoaded == true or null if it's false.
   return component.IsLoaded() ? component : null;
}

第二个问题:

关键字var就像一个变量类型的占位符,在编译代码时,编译器将在幕后制作'用适当的数据类型确定和替换var。

var不要与dynamic混在一起,因为它们不同。

答案 1 :(得分:0)

回答你的第一个问题:

public LoginFormComponent GetLoginFormComponent()
{
    var component = new LoginFormComponent(this);
    return component.IsLoaded() ? component : null;
}

GetLoginFormComponent()是一种返回LoginFormComponent内容的方法。该方法的第一行是创建LoginFormComponent的新实例,并传递您当前所在的LoginPage实例(使用this)。第二行使用ternary operator ?:,基本上表示如果第一个表达式为真,则返回?之后的项,如果表达式为false,则返回:之后的项。它也可以写成:

if(component.IsLoaded())
{
    return component;
}
else
{
    return null;
}

至于你的第二个问题,var只是一种语法糖,可以阻止程序员编写冗余代码。看看声明变量并实例化它的传统方式:

LoginPage loginPage = new LoginPage(driver);

这是多余的权利吗?为什么我们需要两次输入LoginPage?当您使用var时,编译器将隐式确定类型(以免您编写冗余代码):

var loginPage = new LoginPage(driver);

请注意,var与JavaScript var不同。 var不是一个松散类型的对象,对程序员来说只是一个简短的手。