这是典型的课程。
class Round
{
private int radius;
private bool Validate(int radius)
{
if (radius <= 0)
{
return false;
}
else
{
return true;
}
}
public int X { get; set;}
public int Y { get; set;}
public int Radius
{
get
{
return radius;
}
set
{
try
{
if(!Validate(value))
{
throw new ArgumentException();
}
radius = value;
}
catch (ArgumentException)
{
Console.WriteLine("ooops... something went wrong.");
return;
}
}
}
public Round (int X, int Y, int radius)
{
try
{
if (!Validate(radius))
{
throw new ArgumentException();
}
this.X = X;
this.Y = Y;
this.radius = radius;
}
catch (Exception)
{
Console.WriteLine("ooops... something went wrong.");
}
}
public double GetPerimeter()
{
return Math.PI * radius * 2;
}
}
class Program
{
static void Main(string[] args)
{
Round r = new Round(0,0,0);
Console.WriteLine(r.GetPerimeter());
}
}
如您所见,我向构造函数发送了不正确的值,该值将值发送给验证程序。我无法理解我应该怎么做才能使构造函数停止创建对象???
答案 0 :(得分:5)
停止构造函数的方法是抛出异常。
你这样做,但是你也抓住了这个例外。这样,构造函数将继续。不要抓住它。
答案 1 :(得分:0)
如果你不想在构造函数中抛出异常,你可以考虑这个方法
// constructor
public Round (int X, int Y, int radius)
{
this.X = X;
this.Y = Y;
this.radius = radius;
}
// create instance
public static Round CreateInstance(int X, int Y, int radius)
{
if (!Validate(radius))
{
return null;
}
return new Round(X, Y, radius);
}
使用方法:
// invalid should be null
Round invalid = Row.CreateInstance(1, 1, -1);