1

私はいつもこのような小さなことに縛られています... 私はウェルカム ページ クラス 'Default' からクラス 'Login' で作成されたオブジェクト プロパティにアクセスする必要があります。オブジェクトにアクセスできるようにクラスを参照しようとすると、VS 2010 は通常のようにそれを利用可能として一覧表示せず、要求を強制するとエラーが返されます。

私のLoginクラスは次のように定義されています。

public abstract class Login : System.Web.UI.UserControl
{
   ...
   private void Login_click(object sender, EventArgs e)
   {
      MyObject myObject = new MyObject();
      myObject.property1 = "something";
   }
}

そして、次myObjectのように、デフォルトのクラスからアクセスしたいと思います:

public class Default : System.Web.UI.Page
{
   ...   
   private void Page_load(object sender, System.EventArgs e)
   {
      string someLocalVar = Login.myObject.property1;
   }
}

property1Login クラスで設定されるプロパティはどこにありますか。ただし、これは機能せず、VS は Login クラスさえ認識しません。代わりに、ある種の予約語として扱います。usingこれら 2 つのファイルは同じプロジェクトにあるため、このセクションでは問題になりません。以前に他のクラス間でこの方法で変数にアクセスしたことがありますが、今回は何らかの理由でそうではありません。ありがとう!

4

3 に答える 3

3

2つのこと:

  • あなたのクラスはabstract
  • あなたの財産はおそらくそうではありませんstatic
  • 実際にはプロパティを持っていません。それはローカル変数です

abstractクラスのインスタンスをインスタンス化することはできません。クラスのポイントは、abstract他の同様の子クラスが継承できる共有コードを持つクラスを作成することです。あなたのクラスが抽象的である理由はありますか?

プロパティがそうでないstatic場合は、プロパティにアクセスするためにクラスのインスタンスを作成する必要があります。(上で説明したように、抽象的であるためできません)。プロパティを静的にするとLogin.MyObject、インスタンスを作成せずに実行できます。

提供したコードでは、変数はLogin_clickメソッドに対してローカルです。つまり、クラスのインスタンスを作成したとしても、それにアクセスすることはできません。

C# の本を手に取り、基礎を読むことをお勧めします。

于 2013-01-25T20:05:38.607 に答える
2

ここにはいくつかの問題があります。myObjectまず、のメンバーであるかのようにアクセスしていますがLogin、そうではありません。メソッドのローカル変数ですLogin_clickLogin第 2 に、クラス内でのインスタンスを作成することはないためDefault、静的クラスであるか、実際にそのインスタンスを作成しない限り、そのメンバーにアクセスすることはできません。

ここにあなたが望むものにもっと似たものがあります(私は思います)。今のところ、クラスの継承を省略しました。

public class Login 
{
    MyObject object;

    public Login() {
        object = new MyObject();
        object.property1 = "something";
    }
}

public class Default {
    private void Login_click(object sender, EventArgs e) 
    {
        Login _login = new Login();
        string someLocalVar = _login.object.property1; 
    }
}

他の人が言ったように、これを試みる前に、これをより慎重に計画し、プログラミングスキルを強化する必要があります. これは基本的なことなので、法外な時間はかかりませんが、心配する必要はありません。

于 2013-01-25T20:06:58.860 に答える
0

オブジェクトをSession変数に入れてからキャストすることができます。

//in Login.aspx
MyObject myObject = new MyObject();
myObject.property1 = "something";
Session["UserObject"] = myObject;

//in default.aspx
MyObject obj = (MyObject)Session["UserObject"]
string variable = obj.property1;
于 2013-01-25T20:07:43.100 に答える