我经常犯"未将对象引用设置到对象的实例"这样的错误,感觉对new,这些概念还是很模糊,哪位高手能精彩的讲解一下吗??或者推荐一本好书给我看看吧?我这书店都没什么好书.对于.net,很多概念上的知识还是很模糊,而很多书籍都是大纲式的介绍.或者说是入门级的简介,我想深入了解一下这些概念,有什么好书可以推荐一下吗??谢谢.

解决方案 »

  1.   

    new 就是要实例化,说得简单点,也就是动态类需要new,静态的话可以不用。。
      

  2.   

    哪些类需要new,哪些不需要,要多参考你安装的.NET SDK,
    未将对象引用设置到对象的实例
    错误就是说,你在使用该对象的时候它还不存在,有些并不是new能解决的。尤其是WebForm。
      

  3.   

    谢谢,那我这里举一个例子.Option Explicit
    Option StrictImports SystemNamespace MyFunction  Public Class SysFunction    Public Shared Sub OpenPopUp(ByVal opener As System.Web.UI.WebControls.WebControl, _ 
                                    ByVal PagePath   As String, _ 
                                    ByVal windowName As String, _ 
                                    ByVal width      As Integer, _ 
                                    ByVal height     As Integer)
          Dim clientScript As String
          Dim windowAttribs As String
          windowAttribs = "width =" & width & "px," & _
                          "height=" & height & "px," & _
                          "left='+((screen.width -" & width & ") / 2)+'," & _
                          "top='+ (screen.height - " & height & ") / 2+'"
          clientScript = "window.open('" & PagePath & "','" & windowName & "','" & windowAttribs & "');return false;"
          opener.Attributes.Add("onClick", clientScript)
        End Sub  End Class
    End Namespace我把上面的编译成了MyFunction.dllmanage.aspx 中第一句这样调用
    <%@ Page Language="VB" src="Manage.aspx.vb" Inherits="STCNewsManage" %>Manage.aspx.vb这样写的.
    Public Class STCNewsManage
      Public objFunction  As MyFunction.SysFunction = New MyFunction.SysFunction()  'lbEditNews是一个linkButton控件  Sub lbEditNewsClick(sender As Object, e As EventArgs)
        objFunction.OpenPopUp(lbEditNews,"..\EditNews.aspx","编辑新闻",300,400)
      End SubEnd Class运行以后错误信息如下
     ***********************************************************************************
    将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 行 531:objFunction.OpenPopUp(lbEditNews,"..\EditNews.aspx","编辑新闻",300,400)这是为什么呢??
      

  4.   

    也就是空引用/空指针错误
    比如下面的代码:string getstring(){return null;}
    ...
    string s = getstring().ToString(); // NullReferenceException
      

  5.   

    我也遇到过类似问题,
    请确认:
    'lbEditNews是一个linkButton控件
    他的ID和你的程序中使用的是不是一致....
      

  6.   

    我也正有此疑问:public class myclss {
      private string s1;
      
      private void Page_Load(object sender, System.EventArgs e){
        s1 = Request.QueryString["search"];
      }  public string getmystring(){
        return s1;
      }
    }访问getmystring方法可以得到私有全局变量s1的值,但同一个页,如果把URL中的search参数改变后,就会出现“未将对象引用设置到对象的实例”的错误,为什么呢?
      

  7.   

    那是因为Request集合中没有“search”的缘故
      

  8.   

    首先,理论上Null Reference的错误从名称上已经够明确了,就是你使用的一个东西的Reference(你可以认为是“指针”)为Null(空值,也就是没有指向)。出现这种错误,往往因为你没有初始化这个对象。不过现实情况往往是当你调用a.b.c.d.e时出错,你不知道问题是在a还是a.b还是在a.b.c还是在……而且往往应该负责new的也不是你,而是程序的其他部分,你仅仅是调用那个部分的入口然后间接地new了。这也正是楼上“有些并不是new能解决的,尤其是WebForm”的说法。在WebForm里面,例如Session等公共对象及其子对象,是不论到你来new的他们都是由ASP.NET的引擎负责。但是你需要按照一定的规则和顺序去调用他们,这样他们才能在内部为了new了再把东西交给你处理。如果你不按照规则和顺序去做,那么就很可能出现Null Reference的错误。解决这个问题的终究办法,就是多做ASP.NET项目,弄清楚其中的原理,按照规则和顺序去办事,那就不会有错了。
      

  9.   

    嗯,楼上说的真好,受益非浅.那能不能简单说下,如何判断空呢??
    比如Null
    isNothing
    Isdbnull
    等等常用语句的写法呢?或者说说他们的区别呢??谢谢
      

  10.   

    你是用VB.NET还是C#?mdb还是SQL Server?Nothing有关的语句,应该适用于VB.NET(我只用过VB6,所以不敢肯定);IsNull应该使用在SQL语句里面的;null用在C#;IsDBNull则是.NET里面数据对象用的。其实这些都不重要,你要记住Null都是指同一样东西,那就不会有错了,至于不同的语言环境中你再看MSDN来决定用什么。在用数据库的时候,数据读取出来后需要用IsDBNull来鉴定一下在尝试取值,这是唯一需要注意的地方。