2012-12-05 65 views
0

在我的SharePoint 2010的C#/ asp.net網站,我有一個像c# - 如何在A的類中獲取對象A的引用?

​​

它不會有一個構造函數中定義的類。 如何獲得對the current instance of this class的參考?

我想這樣的事情在頂部

public static PDF_Library current;

然後在功能它有

current = (PDF_Library)this;

但沒有奏效...

+0

引用類或實例嗎? – Igor

+0

該類的當前實例 – omega

+0

那麼'this'有什麼問題? – Igor

回答

3

你需要明白,它不這樣工作。你的問題被標記爲asp.net - 多用戶,多線程環境,其中用戶控件的多個實例將始終創建。絕對不確定他們中的哪一個將被吊銷PDF_Library.current。你需要重新考慮你的設計。

更多關於:Page實例在請求處理完成時被丟棄。通常情況下,這個實例及其所有控件和諸如Response,Request,Context等都將被設置爲垃圾收集。由於您在一個靜態字段中保留對UserControl實例的引用,所有這些對象(包括Page)都將保留在內存中,直到此current引用被替換爲其他內容。

+0

所以最好如果我沒有在該PDF_Library類的任何靜態變量的權利? – omega

+0

這太籠統了。 .NET允許靜態變量,它們存在的原因有很多。只是不要將引用指定給對靜態字段而言是短暫的對象。 – Igor

3

它是你在使用的函數中使用了static這一事實,即this沒有工作。 static是一種不綁定到類的任何實例的方法,因此您不能使用this

您唯一的選擇是使該方法爲非靜態或將該類的實例作爲參數傳遞給靜態函數。

從我可以告訴你正試圖創建一個「Singleton Pattern」。有關如何創建單例類的示例,請參閱上一篇MSDN文章的鏈接。

1

這看起來像它會有一個實例。如果該類被標記爲靜態的(它看起來不是這樣),那麼你可以通過名稱「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代碼中遇到的問題是,它被稱爲在生命週期爲時已晚,這就是爲什麼大家參考電話不能正常工作。

+0

這工作,但我認爲我不能寫我的代碼,因爲伊戈爾的迴應上面。 – omega

+0

@omega我同意。 –

相關問題