Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 引用项目并调用其类时出错_C# - Fatal编程技术网

C# 引用项目并调用其类时出错

C# 引用项目并调用其类时出错,c#,C#,我在这段代码中面临以下问题。首先,我创建了一个名为Generic Lib的项目。然后我创建了另一个名为page factory的项目,并添加了GenericLib的引用。因此,当我尝试从GenericLib创建类的对象时,它抛出了一个错误 namespace GenericLib { public class WebDriver { private static IWebDriver driver; public WebDriver(IWebD

我在这段代码中面临以下问题。首先,我创建了一个名为Generic Lib的项目。然后我创建了另一个名为page factory的项目,并添加了GenericLib的引用。因此,当我尝试从GenericLib创建类的对象时,它抛出了一个错误

namespace GenericLib

{
    public class WebDriver
    {

        private static IWebDriver driver;
        public WebDriver(IWebDriver a=null)
        {
            driver = a;
        }
        public IWebDriver Driver
        {
            get { return driver; }
            set { driver = new FirefoxDriver(); }

        }
}
创建了一个引用,并试图通过创建一个对象来访问PageFactory中的驱动程序函数。可以看到以下错误。字段初始值设定项不能引用非静态字段方法或属性

using GenericLib;
namespace PageFactory
{

    [TestClass]
    public class LoginPage
    {
       public WebDriver web1 = new WebDriver();
       public IWebElement loginSubmitBtn = web1.Driver.FindElement(By.XPath(""));

        }
}

不能使用一个实例变量以这种方式初始化另一个实例变量。您的示例同样可以用字符串轻松编写:

public class Class1
{
    public String X = String.Format("{0}", "Hello");
    public String Y = X.Substring(1);  //Error: A field initializer cannot reference the non-static field, method, or property 'Namespace.Class1.X'
}
C语言规范实际上在第节中调用了这种类型的示例

实例字段的变量初始值设定项不能引用正在创建的实例。因此,在变量初始值设定项中引用它是编译时错误,因为变量初始值设定项通过简单名称引用任何实例成员是编译时错误

最好的方法是填充依赖于构造函数中另一个实例变量的值,因此回到您的示例:

[TestClass]
public class LoginPage
{
   public WebDriver web1 = new WebDriver();
   public IWebElement loginSubmitBtn;
   public LoginPage() 
   {
        loginSubmitBtn = web1.Driver.FindElement(By.XPath(""));
   }
}

您可以在
LoginPage
的构造函数中初始化这些对象:

[TestClass]
public class LoginPage
{
    public WebDriver web1;
    public IDisposable loginSubmitBtn;

    public LoginPage()
    {
        web1 = new WebDriver();
        loginSubmitBtn = web1.Driver.FindElement(By.XPath(""));
    }
}

我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。
[TestClass]
public class LoginPage
{
    public WebDriver web1;
    public IDisposable loginSubmitBtn;

    public LoginPage()
    {
        web1 = new WebDriver();
        loginSubmitBtn = web1.Driver.FindElement(By.XPath(""));
    }
}