MSDN говорит о TargetInvocationException: The exception that is thrown by methods invoked through reflection
Здесь у нас нет рефлексии вроде бы. Давайте сформулирую четче: речь идет о коде habrahabr.ru/blogs/net/77039/#comment_2241555
какое исключение получится в результате, если конструктор Z.Z() бросит, скажем, NullReferenceException?
кстати, есть еще один способ — через атрибуты. правда, в мелкософте об этом догадались, и все атрибуты, которые проверяются перед запуском, помечены как sealed (
так что только через подмену сборки со стандартными атрибутами
насчет сферического коня спорить не буду )
а смысл в такой задачке был в порядке вызова элементов — инициализатор производного типа, конструктор базового типа, конструктор производного типа. мне эта последовательность показалась неочевидной, на ней я и попытался построить задачку. то, что bobermaniac смог мои ограничения обойти — ему только в плюс, я считаю
конечно, забота об этом ложится на разработчика. как и в случае перегрузки GetHashCode — пользователь должен гарантировать, что для объекта с одним и тем же состоянием будет возвращаться один и тот же хэш
нет, она эквивалентна X.operator true(x)? a: b;
вызывается только один оператор из двух (они должны быть всегда определены вместе)
какой именно вызывается, зависит от того, какой выгоднее, чтобы оборвать вычисления: если, к примеру, выражение x1 && x2, то вызовется false, если x1 || x2, вызовется true
соответственно, тот, кто пишет эти операторы, может оптимизировать каждый из них под нужную ситуацию. но в любом случае они должны давать противоположный результат
NullReferenceException будет обернут внутрь другого исключения
убедитесь сами
Здесь у нас нет рефлексии вроде бы. Давайте сформулирую четче: речь идет о коде habrahabr.ru/blogs/net/77039/#comment_2241555
какое исключение получится в результате, если конструктор Z.Z() бросит, скажем, NullReferenceException?
так что только через подмену сборки со стандартными атрибутами
кстати, какого типа будет это неперехваченное исключение? )
ну и применим тот же способ, которым решается этюд
по сути в этом и заключался исходный этюд для канала #c# )
а смысл в такой задачке был в порядке вызова элементов — инициализатор производного типа, конструктор базового типа, конструктор производного типа. мне эта последовательность показалась неочевидной, на ней я и попытался построить задачку. то, что bobermaniac смог мои ограничения обойти — ему только в плюс, я считаю
похоже, я недостаточно наложил ограничений на консольный вывод )
может, еще какой-то знаете?
вызывается только один оператор из двух (они должны быть всегда определены вместе)
какой именно вызывается, зависит от того, какой выгоднее, чтобы оборвать вычисления: если, к примеру, выражение x1 && x2, то вызовется false, если x1 || x2, вызовется true
соответственно, тот, кто пишет эти операторы, может оптимизировать каждый из них под нужную ситуацию. но в любом случае они должны давать противоположный результат