И еще насчет description
То, что этот метод статический, удобно использовать при проверке входных условий при вызове класса в main. Если какое-либо условие не выполняется, то можно вывести сообщение об ошибке без инициализации класса (которая невозможна при неправильных входных данных), т.е. не надо копировать метку из description в сообщение об ошибке, а просто написать что-то подобное:
X++:
public static void main(Args args)
{
MyClass myClass1;
;
if (! args.record())
throw error(Error::missingRecord(MyClass::description()));
// etc...
}
Хотя в стандарте туда часто передают funcname(), но мне кажется, что MyClass::description() в данном случае информативнее. А создавать для этого исключения специально отдельную метку лениво.