所以我在这里尝试将同一个类(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类中的值。
我尝试过使用方法来做但仍然得到一个空引用。
答案 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
,但以下示例显示了两个:
ClassB
传递给构造函数,并在this
或ClassB
分配给this
中的媒体资源。关键是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
}