Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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#中的ContentPlaceHolder类中使用new关键字?_C#_Asp.net_Master Pages - Fatal编程技术网

为什么我不需要在C#中的ContentPlaceHolder类中使用new关键字?

为什么我不需要在C#中的ContentPlaceHolder类中使用new关键字?,c#,asp.net,master-pages,C#,Asp.net,Master Pages,在ASP.NET中,拥有母版页并使用C#,我可以使用ContentPlaceHolder,使用或不使用new关键字,并且此类中的方法和属性数量相同 也就是说,两者都有 ContentPlaceHolder ctph; 及 具有相同的方法和属性。我不明白为什么我可以在没有新关键字的情况下使用ctph变量。是的,但是你能在运行时这样做吗 Intellisense(拼写?)是一个纯编译时构造,它不知道您的第一个示例在运行时将为null并引发异常。它只列出了基于元数据的方法和属性等 ContentPl

在ASP.NET中,拥有母版页并使用C#,我可以使用
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;