一連のプロパティを含むクラスがあります。その型のオブジェクトで ToString() を呼び出すのは、プログラマーの間違いです。このコード例を見てください:
using System;
public class Foo
{
public int ID = 123;
public string Name = "SomeName";
private string ToString() { return null; }
}
public class MyClass
{
public static void Main()
{
Foo myObj = new Foo();
WL("I want this to be a compiler error: {0}", myObj.ToString());
RL();
}
#region Helper methods
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
#endregion
}
ほとんどの人が ID を文字列として書き出す必要がある場合は、ID を返すように ToString を実装する必要があると考えることができます。ただし、プログラマーは「偶然」にコードを動作させるため、これは悪い習慣だと思います。私のクラスを使用するプログラマーは、必要なものを指定する必要があります。
代わりに、誰かが myObj.ToString() を呼び出して、コンパイル時エラーとして表示されるようにしたいのです。プライベートな ToString() 関数を作成することでそれができると思ったのですが、うまくいきません。
これを取り上げた理由は、ID ではなく完全修飾クラス名を含むクエリ文字列になってしまったためです。
質問は次のとおりです。クラスのオブジェクトで ToString() 関数を呼び出すとコンパイラ エラーが発生するように、ToString() 関数を「非表示」にする方法はありますか?