Class MyClass
{
public int[] MyArray
{
get {return MyArray;}
set
{
if (value == null) { MyArray = new int[2] { 0, 0 }; return;}
else { MyArray = value; return;}
}
}
public MyClass()
{
this.MyArray = new int[2] { 0, 0 };
}
}在我的类中,我有一个int[],我需要用value在set中做一些事情,除非我尝试创建一个新的MyClass实例,我会得到一个堆栈溢出。
当我在构造函数和set上放置一个断点时,它会显示构造函数中的myArray = new int[2] {0, 0};调用set方法,一旦set到达行myArray = value,它就再次调用set方法。这会循环一段时间,然后抛出堆栈溢出异常。我试过在作业结束后放一个return;,但是它没有到达返回的位置。
对数组使用set方法的任何启发都将是很棒的。
发布于 2018-04-23 06:25:09
如果您的get和set有一个主体,那么您需要一个正在丢失的支持字段。
class MyClass
{
private int[] _myArray;
public int[] MyArray
{
get {return _myArray;}
set
{
if (value == null) { _myArray = new int[2] { 0, 0 }; }
else { _myArray = value; }
}
}
public MyClass()
{
this.MyArray = new int[2] { 0, 0 };
}
}在这段代码中,有一个私有字段_myArray,它被用作属性的支持字段。
发布于 2018-04-23 06:22:47
存在的问题是,您指向相同的内存空间:
public int[] MyArray
{
get {return MyArray;}
...
}访问属性myArray将访问属性myArray,这将导致访问相同的属性!
对此的回答是使用private variable,它只能直接从您的类中编写。public property只会访问这个变量。
如下所示:
class MyClass
{
private int[] _myArray;
public int[] MyArray
{
get { return _myArray; }
set
{
if (value == null) { _myArray = new int[2] { 0, 0 }; return; }
else { _myArray = value; return; }
}
}
}可以找到更多关于属性的详细信息,例如论DotNetPerls或正式页面。
https://stackoverflow.com/questions/49974571
复制相似问题