[英]ASP / C# Session Variable - Object reference not set to an instance of an object
[英]Get object reference from its instance variable in c#?
我是WPF应用程序和C#的新手。 我将说明我的情况:
我有一个名为myObject
的类,该类的图像实例变量的类型为Image
在运行时,我想获取image
的对象引用,例如:
myObject obj = new myObject();
Image img = obj.getImage();//reference to obj's image variable;
现在从img
我想获取对象obj
的引用。 我怎么得到这个?
编辑:下面是一个解决方案。
伙计们! 首先非常感谢您提供的所有帮助! 我真的很感激! 你们都摇滚!
遵循Noob.net的建议,每当我创建myObject obj时,都会将obj引用存储在img.Tag属性中!
myObject obj = new myObject();
img.MouseLeftButtonDown += new MouseButtonEventHandler(img_MouseLeftButtonDown);
Image img = obj.getImage();
处理程序部分:
Image i = (Image)sender;
myObject otemp = (myObject)i.Tag;// refers to the same object from which img was created
直接执行此操作的唯一方法是,如果您的Image
类型具有对其所有者对象的引用。 如果您谈论的是.NET内置的Image
类型,则没有此类属性。
您将必须采取步骤将每个Image
的父对象记录到其他位置,以便稍后再使用它。 一种常见的模式是在内存中维护一个HashTable
,其中Image
对象是键,而MyObject
对象是值。
如果您遵循将Image
和myObject
放到Dictionary
的建议,那将是一段糟糕的时光。 您的图片将在字典中有效,并且可能不会及时得到处理。
那么,为什么可以在结构化数据以默认跟踪引用时使用数据结构跟踪此映射?
如果将映射包装在View Model中 ,您将明白我的意思:
public class MyObjectViewModel : INotifyPropertyChanged
{
private myObject obj;
public Image Image
{
get;
private set;
}
public MyObjectViewModel(myObject obj)
{
this.obj = obj;
this.Image = obj.getImage();
}
public void SomethingThatMakesImageChange()
{
this.Image = obj.getImage();
this.RaisePropertyChanged("Image");
}
// ... insert suitable INPC implementation ...
}
这种方法有两个明显的优点:
Image
类将仅在视图中生存必要的时间 myObject
实例的实时更改,则可以使用视图模型来处理这些更改并相应地更新Image
。 您可以使用Tag属性存储有关Image实例的其他信息
您的Image
类必须具有Parent
属性,该属性保存对myObject
实例的引用。 然后,您必须确保在myObject
上设置图像时,要设置Parent
属性。
现在,如果不能或不将Parent
属性添加到Image
类,则唯一的选择是将myObject
实例与Image
进行比较,以查看myObject
包含它。 如果您有myObject
的集合,那么使用Linq相当容易,但是性能可能不佳。
我想我听不懂,但我的回答如下:
public class MyObject
{
private Image img;
public Image Img
{
get { return img; }
set { img = value; }
}
public MyObject()
{
Img = Image.FromFile("");
}
}
public class Main
{
MyObject obj = new MyObject();
//obj.Img = Image.FromFile(""); //if u want
Image image = obj.Img;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.