我有一个简单的类模型,里面有一个属性。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
UF uf = new UF(5);
}
}
}
namespace ConsoleApp1
{
class UF
{
public UF(int N)
{
this.n = N;
Console.WriteLine(this.n);
}
private int n
{
get => n;
set
{
if (value <= 0) throw new ArgumentOutOfRangeException(nameof(value));
else
{
n = value;
}
}
}
}
}
谁可以向我解释为什么在通过构造函数进行类初始化之后我在setter属性上有StackOverflow异常?
答案 0 :(得分:4)
您的例外来自:
n = value;
您已使用n
的名称声明了您的媒体资源,并不断尝试重写其值。尝试将您的媒体资源重命名为N
,这应该没问题。
class UF
{
public UF(int N)
{
this._n = N;
Console.WriteLine(this.n);
}
int _n;
private int N
{
get => _n;
set
{
if (value <= 0) throw new ArgumentOutOfRangeException(nameof(value));
else
{
_n = value;
}
}
}
}
答案 1 :(得分:3)
你在你的setter中设置了n,它再次调用n的setter反复做同样的事情直到你的callstack已满。
您可以尝试实现公共属性N和私有字段n。 然后从属性的setter中设置字段:
class Program
{
static void Main(string[] args)
{
UF uf = new UF(5);
Console.ReadKey(true);
}
}
class UF
{
private int n;
public UF(int N)
{
this.n = N;
Console.WriteLine(this.n);
}
public int N
{
get => n;
set
{
if (value <= 0)
throw new ArgumentOutOfRangeException(nameof(value));
else
{
n = value;
}
}
}
}