为什么我不需要在C#中的ContentPlaceHolder类中使用new关键字?
在ASP.NET中,拥有母版页并使用C#,我可以使用为什么我不需要在C#中的ContentPlaceHolder类中使用new关键字?,c#,asp.net,master-pages,C#,Asp.net,Master Pages,在ASP.NET中,拥有母版页并使用C#,我可以使用ContentPlaceHolder,使用或不使用new关键字,并且此类中的方法和属性数量相同 也就是说,两者都有 ContentPlaceHolder ctph; 及 具有相同的方法和属性。我不明白为什么我可以在没有新关键字的情况下使用ctph变量。是的,但是你能在运行时这样做吗 Intellisense(拼写?)是一个纯编译时构造,它不知道您的第一个示例在运行时将为null并引发异常。它只列出了基于元数据的方法和属性等 ContentPl
ContentPlaceHolder
,使用或不使用new
关键字,并且此类中的方法和属性数量相同
也就是说,两者都有
ContentPlaceHolder ctph;
及
具有相同的方法和属性。我不明白为什么我可以在没有新关键字的情况下使用
ctph
变量。是的,但是你能在运行时这样做吗
Intellisense(拼写?)是一个纯编译时构造,它不知道您的第一个示例在运行时将为null并引发异常。它只列出了基于元数据的方法和属性等
ContentPlaceHolder ctph;
ctph
具有值default(ContentPlaceHolder)
。对于引用类型,这将是null
。对于值类型,这将是所有字段默认初始化的有效对象
ContentPlaceHolder
是一种引用类型,因此,当您说:
具有相同的方法和属性
是的,因为它们是由类型定义的。你是通过智能感知来确定的吗?嗯。。。不要。试着调用一个方法,看看会发生什么。没有错误,没有警告,没有异常抛出。没有“new”它就可以正常工作@user1462042您能给我们展示一个代码示例,它在
ctph
上成功地调用了一个方法,而没有实例化它吗?@user1462042我非常怀疑,因为它是一个类:@user1462042:您对“works”这个词的含义有一个错误的概念。编译!=works.ContentPlaceHolder ctph;ctph=(ContentPlaceHolder)Master.FindControl(“MainContent”);//工作正常!您是否在母版页上放置了id为ctph
的ContenPlaceHolder
控件?否,ctph位于单独的page@user1462042:Intellisense不是调试工具,而是自动完成功能。您不能假设您的对象处于有效状态,因为intellisense显示它有可用的方法。它怎么可能知道在运行时变量的值是多少?它不能,它没有任何意义。@user1462042L:来解释程序的行为,而不是intellisense。好的,我调用了FindControl。内容占位符ctph;ctph=(ContentPlaceHolder)Master.FindControl(“MainContent”);HtmlTableCell-tt;tt=(HtmlTableCell)ctph.FindControl(“td”);正常工作,无运行时错误“正常工作,无运行时错误”…对,因为ctph=(ContentPlaceHolder)Master.FindControl(“MainContent”)代码>。您刚刚为它指定了一个新值!当它为空时,您从未使用过它,但我向您保证,它在ContentPlaceHolder ctph之后就是空的代码>。您也可以在同一行中声明并分配它。
ContentPlaceHolder ctph;