在类之间检索对象
本文关键字:对象 检索 之间 | 更新日期: 2023-09-27 17:56:08
我总是被这样的小事所束缚......我需要从我的欢迎页面类"默认"访问在"登录"类中创建的对象属性。当我尝试引用类以便访问该对象时,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
是在登录类中设置的属性。但是,这不起作用,VS 甚至无法识别登录类;相反,它将其视为某种保留词。这两个文件位于同一项目中,因此在using
部分中应该不是问题。我以前在其他类之间以这种方式访问过变量,只是这次由于某种原因没有。谢谢!
:
- 您的班级
abstract
- 您的财产可能不是
static
- 你实际上没有属性,它是一个局部变量
不能实例化abstract
类的实例。abstract
类的要点是创建一个具有其他类似子类可以继承的一些共享代码的类。你的类是抽象的有什么原因吗?
如果属性未static
则必须创建类的实例才能访问该属性。(正如我上面描述的,你不能,因为它是抽象的)。如果将属性设置为静态属性,则可以在不创建实例的情况下执行Login.MyObject
。
在您提供的代码中,您的变量是 Login_click
方法的本地变量,这意味着即使您创建了类的实例,也无法访问它。
我建议你拿起一本C#书,阅读基础知识。
这里有许多问题。首先,您访问myObject
就像它是Login
的成员一样,但事实并非如此。它是Login_click
方法的局部变量。其次,您永远不会在Default
类中创建Login
的实例,因此除非它是静态类或您实际创建了它的实例,否则您将无法访问它的任何成员。
这里有更像你想要的东西(我认为)。我暂时省略了您的类继承。
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;
}
}
就像其他人说的那样,在尝试这样做之前,你需要更仔细地计划这一点并加强你的编程技能。这是基本的东西,所以不应该花费太多的时间 - 不过别担心,我们都是从这里开始的。
您可以将对象放入 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;