我总是被这样的小事束缚......我需要从我的欢迎页面类'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
部分中的问题。我以前在其他类之间以这种方式访问过变量,但不是出于某种原因。
谢谢!
答案 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;