c#-从类

时间:2018-11-03 11:12:42

标签: c#

当我在我的表单中声明了我的公共表单的内部调用公共空隙时,它可以正常工作。但是,当我从另一个类中调用它时,它不起作用..? 我在课堂上这样做。

otherForm oForm = new otherForm();
oForm.thisvoid();

在公共场合,我正在WebView中加载一个网址。正如我之前所说,从声明它的Form中调用它就可以了。因此,该函数本身并没有什么问题。

这是我的公开空白

public void thisvoid()
    {
        try
        {
            webview.LoadUrl("http://localhost:5000);
        } catch (Exception ee)
        {
            Console.WriteLine("Error");
            Console.WriteLine(ee);
        }
    }

错误是:

  

System.NullReferenceException:对象引用未设置为实例   一个对象

1 个答案:

答案 0 :(得分:2)

根据您在注释webview对象中写的内容,未在构造函数中初始化。将其初始化添加到otherForm的构造函数中,它应该可以工作。

我猜想从otherForm调用它时为什么起作用,是因为您在一路上初始化了它。

示例(编辑):

例如,使用其他类中的otherForm关键字实例化new

var oF = new otherForm();

运行时在做什么,它会搜索无参数构造函数,该构造函数是在创建类实例时执行的类的特殊方法。它应该被命名为一个类。

现在第二部分-您使用的webview是一个对象-它是控件,其他形式还是仅是某些对象。它存储在您的班级的一个字段中。但是,除非您创建它的实例,否则它为null-表示此对象不存在,您只有其潜在的句柄。因此,您必须像这样创建该对象(类名已完全组成):

public class otherForm
{
    WebView webview;       

    public otherForm()
    {
        webview = new WebView();
    }
}

当然,WebView构造函数本身可能需要您需要提供的更多参数。

所以这里发生的是:

  1. 运行时遇到var otherForm = new otherForm();
  2. 它搜索(在这种情况下)无参数构造函数
  3. 它在构造函数中执行语句
  4. 其中有webview个对象的创建
  5. 稍后它在该实例上以任何方法调用webView时,该对象存在并且可以使用。

您可能错过的是第4点。可以在上面找到如何包含它的示例。

更多读物:

Stack Overflow on NullReferenceException

Some examples of constructors