在我的SharePoint 2010 c# / asp.net站点中,我有一个定义如下的类
namespace PDF_Library.VisualWebPart1
{
public partial class PDF_Library : Usercontrol
{
public static PDF_Library current;
protected void Page_Load(object sender, EventArgs e)
{
current = (PDF_Library)this;
}
}
}
public static class Page_State
{
public static Page is_display()
{
return PDF_Library.current.Page; // didn't work...
}
}它没有构造函数。如何获取对the current instance of this class的引用?
我在上面试过这样的东西
public static PDF_Library current;
然后在它的一个函数中
current = (PDF_Library)this;
但那并不管用。
发布于 2012-12-05 11:26:21
你需要明白它不是这样工作的。您的问题被标记为asp.net -多用户、多线程环境,其中将始终创建PDF_Library用户控件的多个实例。他们中的哪一个会挂在PDF_Library.current上,这是绝对不确定的。你需要重新考虑你的设计。
关于这一点的更多信息:当请求处理完成时,Page实例将被释放。通常,此实例及其所有控件和内容(如Response、Request、Context等)将设置为垃圾收集。因为您在静态字段中保留了对UserControl实例的引用,所以所有这些对象(包括Page)都将保留在内存中,直到此current引用被替换为其他对象为止。
发布于 2012-12-05 11:15:21
事实是,您在生成current的函数中使用了static,因此this不起作用。static是一个不绑定到类的任何实例的方法,因此您不能使用this。
您唯一的选择是使方法成为非静态的,或者将类的实例作为参数传递给静态函数。
据我所知,你正在尝试创建一个"Singleton Pattern“。有关如何创建单例类的示例,请参阅指向上一篇MSDN文章的链接。
发布于 2012-12-05 11:18:59
这看起来像是有一个实例。如果类被标记为静态(看起来并不是这样),那么您可以通过名称"PDF_Library“来引用它。否则,使用ILSpy或反射器查看最终结果。我敢打赌它有一个构造函数;你看不到一个构造函数并不意味着它不存在。覆盖默认的ctor并在那里设置实例。
namespace PDF_Library.VisualWebPart1
{
public partial class PDF_Library : Usercontrol
{
public static PDF_Library Current;
public PDF_Library() : base() {
Current = this;
}
}
}您的Page_Load代码可能遇到的问题是,在生命周期中调用它太晚了,这就是为什么您的引用调用不起作用。
https://stackoverflow.com/questions/13715652
复制相似问题