0

私のSharePoint2010c#/ 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;

しかし、それはうまくいきませんでした...

4

3 に答える 3

3

動作しなかったのは、あなたが評価していstaticた機能で使用したという事実です。はクラスのどのインスタンスにも関連付けられていないメソッドであるため、を使用することはできません。currentthisstaticthis

唯一のオプションは、メソッドを非静的にするか、クラスのインスタンスをパラメーターとして静的関数に渡すことです。

私が言えることから、あなたは「シングルトンパターン」を作成しようとしていると言えます。シングルトンクラスを作成する方法の例については、前のMSDN記事へのリンクを参照してください。

于 2012-12-05T03:15:21.150 に答える
3

このようには機能しないことを理解する必要があります。あなたの質問はasp.netでタグ付けされています-マルチユーザー、マルチスレッド環境で、PDF_Libraryユーザーコントロールの複数のインスタンスが常に作成されます。それらのどれがぶら下がるかは絶対に不確かPDF_Library.currentです。あなたはあなたのデザインを再考する必要があります。

詳細:Pageインスタンスは、リクエスト処理が終了したときに破棄されます。通常、このインスタンスは、すべてのコントロールと、、などを含むものResponseRequestガベージContextコレクション用に設定されます。インスタンスへの参照をUserControl静的フィールドに保持するため、これらのすべてのオブジェクト(を含む)は、この参照が別のものに置き換えられるPageまでメモリに保持されます。current

于 2012-12-05T03:26:21.110 に答える
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コードで発生している可能性のある問題は、ライフサイクルの後半で呼び出されているため、参照呼び出しが機能しないことです。

于 2012-12-05T03:18:58.910 に答える