カスタム構造体とクラスを作成しました。構造体は 3D 空間のポイントです。
public struct Point3D
{
//fields
private static Point3D center = new Point3D(0,0,0);
//properties
public int X { get; set; }
public int Y { get; set; }
public int Z { get; set; }
public static Point3D Center { get { return center; } }
//constructors
public Point3D(int x, int y, int z) : this()
{
this.X = x;
this.Y = y;
this.Z = z;
}
public override string ToString() { return string.Format("({0}; {1}; {2})", this.X, this.Y, this.Z); }
}
カスタムクラスは、ポイントを保存することになっているパスです:
public class Path
{
private List<Point3D> storedPoints = new List<Point3D>();
public List<Point3D> StoredPoints { get; set; }
public void AddPoint(Point3D point) { this.StoredPoints.Add(point); }
public void DeletePointAt(int index) { this.StoredPoints.RemoveAt(index); }
public void ClearPath() { this.StoredPoints.Clear(); }
public override string ToString()
{
StringBuilder sb = new StringBuilder();
foreach (var item in this.StoredPoints)
{
sb.Append(item);
sb.Append(System.Environment.NewLine);
}
return sb.ToString();
}
}
空のリスト List\ を持つインスタンスを常に持ちたいので、パス クラスのコンストラクターは作成していません。ただし、プログラムを実行すると、NullReferenceException が発生します。これは、メイン メソッドのコードです。
static void Main(string[] args)
{
Point3D point1 = new Point3D(-2, -4, -10);
Point3D point2 = new Point3D(6, 7, 8);
Path path1 = new Path();
path1.AddPoint(point1);
path1.AddPoint(point2);
path1.AddPoint(new Point3D(2, 4, 6));
path1.AddPoint(new Point3D(-9, 12, 6));
Console.WriteLine(path1);
}
最初のポイントを追加しようとするとエラーが発生します。デバッガーでは、最初のポイントを追加する前に Path オブジェクトの値が null になっていることがわかりますが、コンストラクターを記述せずにこの問題を解決するには、少なくとも 1 つのポイントをパラメーターとして取ります。つまり、空のパスを作成します。