我需要在C#中的类之间共享数据。听起来很容易。我有一个在类中加载数据的集合。让我们说它的定义如下:
public class AppAdmin: IApplicationThingy
{
public ObservableCollection<Data> DataCollection;
现在,在另一个类中,我想看一下DataCollection。两个类都在同一名称空间中。 AppAdmin.DataCollection
不起作用。你能帮忙吗?
答案 0 :(得分:7)
您必须拥有AppAdmin实例才能访问DataCollection
var appAdmin = new AppAdmin();
var data = addAdmin.DataCollection;
或者如果设计允许,您可以使DataCollection静态
public class AppAdmin: IApplicationThingy
{
public static ObservableCollection<Data> DataCollection;
然后您可以按照
中提到的那样访问DataCollectionvar data = AppAdmin.DataCollection;
答案 1 :(得分:3)
从外观上看,您正在尝试像静态成员一样访问实例成员。静态成员附加到类/类型,实例成员附加到对象。如果您想要访问上面的“DataCollection”,则需要先创建一个AppAdmin对象,然后才能访问它。
试试这个。
var aAdmin = new AppAdmin();
var collection = aAdmin.DataCollection;
答案 2 :(得分:2)
AppAdmin.DataCollection
是AppAdmin
的实例成员。这意味着您需要AppAdmin
的实例来访问特定实例的AppAdmin.DataCollection
。
因此,在某些时候,您需要一个引用(通过类型AppAdmin
的变量或一个评估为AppAdmin
实例的表达式)才能访问AppAdmin.DataCollection
对于特定的实例。
所以,某种程度上,你需要
AppAdmin appAdmin = // expression that evaluates to an instance of AppAdmin
var dataCollection = appAdmin.DataCollection;
或
var dataCollection =
(expression that evaluates to an instance of AppAdmin).DataCollection
获取AppAdmin.DataCollection
的特定实例的AppAdmin
引用。
让我们更简单地说:
class Dog {
public IEnumerable<DogLeg> Legs { get; set; }
}
Dog
有Legs
。为了能够获得特定的Dog
Legs
,您需要Dog
的实例来接收Legs
的请求。
同样,AppAdmin
有一个DataCollection
。您需要AppAdmin
的特定实例来接收其DataCollection
的请求。
因此,要访问实例成员(无论是字段,属性还是方法),您需要一个实例对象来接收请求。
答案 3 :(得分:0)
您必须实例化该对象,然后调用数据字段。
AppAdmin aa = new AppAdmin();
aa.DataCollection;
答案 4 :(得分:0)
您需要拥有该类的实例才能访问其成员。
为了共享实例中的数据,您需要传递它:
// in one object that needs the object
var myAppAdmin = new AppAdmin():
var myData = myAppAdmin.DataCollection;
// call to another object, passing in the class
myOtherClass.GetDataFromAppAdmin(myAppAdmin);
答案 5 :(得分:0)
也许你想让它变得静止?
public class AppAdmin: IApplicationThingy
{
static public ObservableCollection<Data> DataCollection;
答案 6 :(得分:0)
...取决于
如果数据只需要始终在对象的任何给定实例之外可用,只需将其设为static
:
public static ObservableCollection<Data> DataCollection;
如果数据绑定到对象的实例,那么您可以从实例访问它而不是从类中访问它:
var myObj = new AppAdmin();
myObj.DataCollection ...
但请记住静态和实例值之间的区别。这是一门重要的学习科目。试图将两者混合在一起会导致奇怪的错误。