Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类之间检索对象_C#_Asp.net - Fatal编程技术网

C# 在类之间检索对象

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) {

我总是被这样的小事缠住。。。我需要从我的欢迎页面类“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
是登录类中设置的属性。但是,这不起作用,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在潜水之前需要更好地掌握基本的编程原理