如何从B类(而不是从主类)到达A类的数据对象

时间:2015-07-15 17:28:23

标签: c# .net oop

我们说我有3个班级:

  

主要班级,A班,B班

并且让我们说B类有一个需要来自A类数据的方法。(数据实际上是一个数据视图对象)。

对象A类和B类的实例是在主类中创建的,不管上面是什么(通常都是为了创建它们)

从B类到达A类数据视图对象的最佳方法是什么?

我应该将dataview对象设为内部吗?我应该让它静止吗?我应该让它内部静止吗?

我已经学会了在这样的情况下创建属性,而且只是"得到"对象,但由于它是创建A类对象的主要形式(而不是B类),我无法从B类到达该属性。

修改,这是一个演示代码:

Class Main
{

A a = new A();
B b = new B();

a.doingAClassStuff(); //Not possible unless Class A is set to public or the method is set to internal (classes are internal by default)
b.doingBClassStuff(); //Likewise

//need to get the dv object here.
//dv.rows[1].foo = bar;
}
  

上面主要类我需要从B类中获取dv对象。

//each class exist in a different class file (.cs file) inside the project
Class A 
{
doingAClassStuff()
{
MessageBox.Show("Hello From Class A!");
}
//here access to the dv object is also needed.
//dv.rows[5].foo = something;
}
  

A类还需要获得B类的dv对象!

//in another file as well
Class B 
{
DataView dv = new Dataview(datatable1)

doingBClassStuff()
{
MessageBox.Show("Hello From Class B!");
}
}

我的笔记:

  1. 制作" dv"只有"内部"不会让它可见。

  2. 制作" dv" "内部静电"将使它可见,我可以使用它,但我不确定"静态"没有缺点,我不是每个类创建超过1个实例(如果它很重要)。

  3. 我尝试使用" get"设置属性并得到它,但由于属性是公开的,我无法将它们设置为"内部"他们是否也向集会外公开?

  4. 非常感谢!

3 个答案:

答案 0 :(得分:1)

如果没有关于您的要求和限制的任何其他信息,我将采用这种方式。

如果Class A需要Class B才能正常运行,您应该向Class B提供Class A成员,并在{{1}的构造函数中对其进行初始化或者提供一种设置成员的方法。

然后

Class B应该通过其公共接口公开Class A所需要的方式,这对于类是有意义的。即不要公开Class B

DataView

别处

public class A
{
    private B _b;

    public A(B b)
    {
        _b = b;
    }

    void UseData()
    {
        _b.GetData();
    }
}

Public class B
{
    public DataView GetData();
}

答案 1 :(得分:0)

我无法添加评论,但这似乎与以下帖子类似,要求相当于朋友。最佳答案是使用InternalsVisibleTo来实现类似的功能。

What is the C# equivalent of friend?

答案 2 :(得分:0)

  

从B类到达A类数据视图对象的最佳方法是什么?

一些选项:

  • A的实例传递给B
  • 实例的方法
  • 将属性添加到B类型的A(如果该实例将用于多个操作
  

我应该将dataview对象设为内部吗?我应该让它静止吗?我应该让它内部静止吗?

  • 如果您希望所有类型在同一个程序集中可以访问 {<1}},而不是程序集的外部可以访问它(基本上是私有的装配

  • 如果希望程序集内外的所有类型都可以使用它,请将其设为internal

  • 如果数据适用于 public的所有实例

  • ,请将其设为静态