首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# -如何在A的类中获得对对象A的引用?

c# -如何在A的类中获得对对象A的引用?
EN

Stack Overflow用户
提问于 2012-12-05 11:08:47
回答 3查看 295关注 0票数 0

在我的SharePoint 2010 c# / asp.net站点中,我有一个定义如下的类

代码语言:javascript
复制
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;

但那并不管用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-05 11:26:21

你需要明白它不是这样工作的。您的问题被标记为asp.net -多用户、多线程环境,其中将始终创建PDF_Library用户控件的多个实例。他们中的哪一个会挂在PDF_Library.current上,这是绝对不确定的。你需要重新考虑你的设计。

关于这一点的更多信息:当请求处理完成时,Page实例将被释放。通常,此实例及其所有控件和内容(如ResponseRequestContext等)将设置为垃圾收集。因为您在静态字段中保留了对UserControl实例的引用,所以所有这些对象(包括Page)都将保留在内存中,直到此current引用被替换为其他对象为止。

票数 3
EN

Stack Overflow用户

发布于 2012-12-05 11:15:21

事实是,您在生成current的函数中使用了static,因此this不起作用。static是一个不绑定到类的任何实例的方法,因此您不能使用this

您唯一的选择是使方法成为非静态的,或者将类的实例作为参数传递给静态函数。

据我所知,你正在尝试创建一个"Singleton Pattern“。有关如何创建单例类的示例,请参阅指向上一篇MSDN文章的链接。

票数 3
EN

Stack Overflow用户

发布于 2012-12-05 11:18:59

这看起来像是有一个实例。如果类被标记为静态(看起来并不是这样),那么您可以通过名称"PDF_Library“来引用它。否则,使用ILSpy或反射器查看最终结果。我敢打赌它有一个构造函数;你看不到一个构造函数并不意味着它不存在。覆盖默认的ctor并在那里设置实例。

代码语言:javascript
复制
namespace PDF_Library.VisualWebPart1
{
    public partial class PDF_Library : Usercontrol   
    {
        public static PDF_Library Current;
        public PDF_Library() : base() {
           Current = this;
        }

    }
}

您的Page_Load代码可能遇到的问题是,在生命周期中调用它太晚了,这就是为什么您的引用调用不起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13715652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档