C# 在类之间检索对象
我总是被这样的小事缠住。。。我需要从我的欢迎页面类“Default”访问在类“Login”中创建的对象属性。当我尝试引用该类以便访问该对象时,VS 2010不会像通常那样将其列为可用,强制请求只会返回一个错误 我的C# 在类之间检索对象,c#,asp.net,C#,Asp.net,我总是被这样的小事缠住。。。我需要从我的欢迎页面类“Default”访问在类“Login”中创建的对象属性。当我尝试引用该类以便访问该对象时,VS 2010不会像通常那样将其列为可用,强制请求只会返回一个错误 我的Login类定义如下: public abstract class Login : System.Web.UI.UserControl { ... private void Login_click(object sender, EventArgs e) {
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甚至不识别登录类;相反,它将其视为某种保留字。这两个文件位于同一个项目中,因此在使用部分中这不应该是一个问题。我以前在其他类之间以这种方式访问过变量,但这次不是出于某种原因。
谢谢 2件事:
- 您的类是
abstract
- 您的属性可能不是静态的
- 实际上你没有一个属性,它是一个局部变量
不能实例化抽象类的实例。抽象类的要点是创建一个包含一些共享代码的类,其他类似子类可以继承这些代码。你的类抽象有什么原因吗
如果属性不是静态的,则必须创建类的实例才能访问该属性。(正如我上面所描述的,你不能这么做,因为它是抽象的)。如果将属性设置为静态,则可以在不创建实例的情况下执行Login.MyObject
在您提供的代码中,您的变量是Login\u click
方法的本地变量,这意味着即使您创建了类的实例,您也无法访问它
我建议你拿起一本C#书,读一下基础知识。两件事:
- 您的类是
abstract
- 您的属性可能不是静态的
- 实际上你没有一个属性,它是一个局部变量
不能实例化抽象类的实例。抽象类的要点是创建一个包含一些共享代码的类,其他类似子类可以继承这些代码。你的类抽象有什么原因吗
如果属性不是静态的,则必须创建类的实例才能访问该属性。(正如我上面所描述的,你不能这么做,因为它是抽象的)。如果将属性设置为静态,则可以在不创建实例的情况下执行Login.MyObject
在您提供的代码中,您的变量是Login\u click
方法的本地变量,这意味着即使您创建了类的实例,您也无法访问它
我建议你拿起一本C#书,读一下基础知识。这里有很多问题。首先,您正在访问myObject
,就像它是Login
的成员一样,而它不是。它是您的Login\u click
方法的局部变量。其次,在默认
类中永远不会创建登录
的实例,因此除非它是一个静态类或您实际创建了它的实例,否则您将无法访问它的任何成员
这里有一些更像你想要的东西(我想)。我暂时忽略了你的类继承
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;
}
}
正如其他人所说,在尝试之前,您需要更仔细地计划这一点,并加强您的编程技能。这是基本的东西,所以不需要花费太多的时间——不过别担心,我们都是从这里开始的。这里有很多问题。首先,您正在访问myObject
,就像它是Login
的成员一样,而它不是。它是您的Login\u click
方法的局部变量。其次,在默认
类中永远不会创建登录
的实例,因此除非它是一个静态类或您实际创建了它的实例,否则您将无法访问它的任何成员
这里有一些更像你想要的东西(我想)。我暂时忽略了你的类继承
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;
}
}
正如其他人所说,在尝试之前,您需要更仔细地计划这一点,并加强您的编程技能。这是基本的东西,所以不需要花费太多的时间——不过别担心,我们都是从这里开始的。您可以将对象放入一个会话
变量中,然后将其回滚
//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;
您可以将对象放入会话
变量中,然后将其强制转换回
//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;
有没有办法创建一种可以在整个项目中访问的全局对象?@Nibirue是的。这叫做公共课。我不确定你在处理基本的编程原则。我不想冒犯你,但你需要先学会走路,然后才能跑步。有没有办法创建一种在整个项目中都可以访问的全局对象?@Nibirue是的。这叫做公共课。我不确定你在处理基本的编程原则。“我不想冒犯你,但你需要先学会走路,然后才能跑。”穆罕默德·萨耶德,啊,没关系。谢谢你删除了否决票:-)在这种情况下,这最多只能算是他的黑名单。我认为OP需要更好地掌握基本的编程原理,然后才能深入研究类似的内容。myObject
更适合作为登录类的属性。但我不理解否决票。这将对以后访问此页面的其他人有所帮助。@Aniket您没有错,但在这种情况下,这并不是一个好主意。@MohammedElSayed啊,没关系。谢谢你删除了否决票:-)在这种情况下,这最多只能算是他的黑名单。我认为OP在潜水之前需要更好地掌握基本的编程原理