1

我总是被这样的小事情缠住......我需要从我的欢迎页面类“默认”访问在“登录”类中创建的对象属性。当我尝试引用该类以便可以访问该对象时,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节中的问题。我以前在其他类之间以这种方式访问​​过变量,只是这次因为某种原因没有。谢谢!

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_click它是您方法的局部变量。其次,你永远不会Login在你的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 回答