如何在类之间传递对象

时间:2015-05-06 02:28:45

标签: c# object

所以我在这里尝试将同一个类(vs.unselectAll = function() { for (var i = 0; i < vs.tickers.length; i++) { vs.tickers[i].selected = false; } }; )传递给另一个类(class A),但class B在{{1}中实例化}}

class B中使用class A语句将无效,因为当我希望能够使用来自的new语句时,它会导致无限循环,以及创建它的新实例class B的第一个实例。

我知道class A但我在object.equals()中定义class A的对象之前无法使用它。只使用class B会导致空引用。

object.equals

就像我说的,我想避免实例化A类的新副本,因为我希望设置A类中的值。

我尝试过使用方法来做但仍然得到一个空引用。

4 个答案:

答案 0 :(得分:3)

A的构造函数中传递B

public class A
{
   private B _b;

   public A()
   {
       _b = new B(this);
   }
}

public class B
{
    private A _a;

    public B(A a)
    {
        _a = a;
    }
}

正如评论中所提到的,你完全误解了.Equals()。它用于比较两个对象是否相等而不是克隆/传递引用。

答案 1 :(得分:1)

答案

你在那里75%。正如Ron所说,只需将.equals(this)更改为= this,如下所示:

_class_B._class_A = this;

解释

如果我们想将ClassA的同一副本传递给ClassB,并在ClassB内实例化ClassA时执行此操作,那么我们会使用{{ 1}} keyword,表示类的当前实例。

虽然还有其他方法可以将this提供给this,但以下示例显示了两个:

  1. ClassB传递给构造函数,并在this
  2. 中执行属性分配
  3. 直接将ClassB分配给this中的媒体资源。
  4. 关键是ClassB是一个赋值运算符,而=检查两个变量是否引用同一个对象。

    实施例

    Equals()

    概念证明

    This runs as a Fiddle here并打印出&#34;它们是同一个对象,&#34;在最近的版本中也有其他一些东西。

    public class ClassA
    {
        public ClassB MyClassB1 { get; set; }
        public ClassB MyClassB2 { get; set; }
    
        public ClassA()
        {
            // pass `this` to the constructor
            this.MyClassB1 = new ClassB(this);
    
            // pass `this` directly to a property in `ClassB`
            this.MyClassB2 = new ClassB();
            this.MyClassB2.MyClassA = this;
        }
    }
    
    public class ClassB
    {
        public ClassA MyClassA { get; set; }
    
        public ClassB() { }
    
        public ClassB(ClassA classA)
        {
            // do property assignment in the constructor
            this.MyClassA = classA;
        }
    }
    

    一个重要的注意事项是,当我们使用此功能时,我们会向using System; public class Program { public static void Main() { var classA = new ClassA(); if(classA.Equals(classA.MyClassB1.MyClassA) && classA.Equals(classA.MyClassB2.MyClassA) && classA.MyClassB1.MyClassA.Equals(classA.MyClassB2.MyClassA)) { Console.WriteLine("They are the same object."); } } } 提供 ClassB引用,而不是它的副本。这些是非常不同的东西。

答案 2 :(得分:0)

试试这个:

public class A
{
    public B Instance_B;

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

public class B
{
    public A Instance_A;

    public B()
    {
         Instance_A = new A(this);
    }
}

答案 3 :(得分:-2)

使用get; set;

Class A

public partial class class_A : Form
{
    Class_B B = new Class_B();
    B.Class_A = this;
    public Int32 var;
}   

然后在Class B

public class class_B
{
    Class_A A { get; set; }
    // code
}