Ich habe eine Klasse, die eine Reihe von Eigenschaften enthält. Es ist ein Fehler eines Programmierers, wenn er ToString() für ein Objekt dieses Typs aufruft. Nehmen Sie diesen Beispielcode:
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
}
Man könnte argumentieren, dass, wenn ID ist, was die meisten Menschen wollen als eine Zeichenfolge geschrieben, dann sollte ich implementieren ToString so, dass es die ID zurückgibt. Ich halte dies jedoch für eine schlechte Praxis, da Programmierer "versehentlich" funktionierenden Code erhalten. Ein Programmierer, der meine Klasse verwendet, sollte angeben, was er will.
Stattdessen möchte ich, dass, wenn jemand myObj.ToString() aufruft, dies als Kompilierzeitfehler angezeigt wird. Ich dachte, ich könnte das tun, indem ich eine private ToString()-Funktion erstelle, aber das funktioniert nicht.
Der Grund, warum ich das angesprochen habe, ist, dass wir am Ende eine Abfragezeichenfolge hatten, die den voll qualifizierten Klassennamen und nicht eine ID enthielt.
Die Frage ist also: Gibt es eine Möglichkeit, die Funktion ToString() zu "verstecken", so dass der Aufruf auf ein Objekt meiner Klasse einen Compilerfehler verursacht?