如何在C#中访问另一个类中的数据?

时间:2011-06-10 19:51:40

标签: c#

我需要在C#中的类之间共享数据。听起来很容易。我有一个在类中加载数据的集合。让我们说它的定义如下:

public class AppAdmin: IApplicationThingy
{
     public ObservableCollection<Data> DataCollection;

现在,在另一个类中,我想看一下DataCollection。两个类都在同一名称空间中。 AppAdmin.DataCollection不起作用。你能帮忙吗?

7 个答案:

答案 0 :(得分:7)

您必须拥有AppAdmin实例才能访问DataCollection

var appAdmin = new AppAdmin();
var data = addAdmin.DataCollection;

或者如果设计允许,您可以使DataCollection静态

public class AppAdmin: IApplicationThingy
{
     public static ObservableCollection<Data> DataCollection;

然后您可以按照

中提到的那样访问DataCollection
var data = AppAdmin.DataCollection;

答案 1 :(得分:3)

从外观上看,您正在尝试像静态成员一样访问实例成员。静态成员附加到类/类型,实例成员附加到对象。如果您想要访问上面的“DataCollection”,则需要先创建一个AppAdmin对象,然后才能访问它。

试试这个。

var aAdmin = new AppAdmin();
var collection = aAdmin.DataCollection;

答案 2 :(得分:2)

AppAdmin.DataCollectionAppAdmin的实例成员。这意味着您需要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; }
}

DogLegs。为了能够获得特定的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 ...

但请记住静态实例值之间的区别。这是一门重要的学习科目。试图将两者混合在一起会导致奇怪的错误。