检索类之间的对象

时间:2013-01-25 20:01:59

标签: c# asp.net

我总是被这样的小事束缚......我需要从我的欢迎页面类'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;
   }
}

其中property1是Login类中设置的属性。但是,这不起作用,VS甚至不识别Login类;相反,它将它视为某种保留词。这两个文件位于同一个项目中,因此这不应该是using部分中的问题。我以前在其他类之间以这种方式访问​​过变量,但不是出于某种原因。 谢谢!

3 个答案:

答案 0 :(得分:3)

2件事:

  • 您的课程为abstract
  • 您的财产可能不是static
  • 你实际上没有属性,它是一个局部变量

您无法实例化abstract类的实例。 abstract类的要点是创建一个包含其他类似子类可以继承的共享代码的类。你的课程是抽象的吗?

如果您的财产不是static,则必须创建班级的实例才能访问该媒体资源。 (正如我上面所描述的那样,你不能因为它是抽象的)。如果您将属性设置为静态,则可以在不创建实例的情况下执行Login.MyObject

在您提供的代码中,您的变量是Login_click方法的本地变量,这意味着即使您创建了类的实例,也无法访问它。

我建议你拿一本C#书来阅读基础知识。

答案 1 :(得分: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; } } 的实例,所以除非它是一个静态类或你实际创建它的实例,否则你将无法访问任何成员它

这更像是你想要的东西(我想)。我暂时遗漏了你的类继承。

{{1}}

就像其他人所说的那样,在尝试此操作之前,您需要更仔细地计划并加强您的编程技巧。这是基本的东西所以它不应该花费过多的时间 - 不过不用担心,我们都是从这里开始的。

答案 2 :(得分: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;